*_list files: added attribute $sentence. *_rules files: added attributes $w_alt, $p_alt. phoneme definitions: added attribute no_pause. -X command-line option: Show the matching of multiple-word entries in *_list files. espeakedit: Add menu option to compile the intonation data file (the data is not yet used). Start language: Bulgarian. lang=bg (Bulgarian): Add feature in espeakedit to make bg_listx from a lexicon of words which have stress position mark-up. espeakedit: Change the frame-length field from Spin Control to Text Control to allow better access from screen-readers. Language options: add an option to the Regressive Voicing option to de-voice the final consonant of words. Don't speak "dot" if an ellipsis is followed by a dot. Intonation: change the internal pitch unit to give finer control, and align with the values displayed in the espeakedit Prosody window. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@243 d46cf337-b52f-0410-862d-fd96e6ae7743master
gü) i (K i | gü) i (K i | ||||
qü) i (K i | qü) i (K i | ||||
i (A j | i (A j | ||||
i (a_ i | |||||
i (u i | i (u i | ||||
A) ig (_ tS; | A) ig (_ tS; | ||||
A) ix S; | A) ix S; | ||||
tj (_ tS; | tj (_ tS; | ||||
tx tS; | tx tS; | ||||
tz dz | tz dz | ||||
tm mm Geminació | |||||
tm mm // Geminació | |||||
.group u | .group u |
// Abbreviations | // Abbreviations | ||||
//============== | //============== | ||||
a.a.o A:||A:||_o: | |||||
(a . a . o .) A:||A:||_o: | |||||
allg 'alg@maIn | allg 'alg@maIn | ||||
abb 'abb,IldUN | abb 'abb,IldUN | ||||
anm 'anm,E*kUN | anm 'anm,E*kUN | ||||
usf %Untzo:f'O*t | usf %Untzo:f'O*t | ||||
usw %Untzo:v'aIt3 $pause | usw %Untzo:v'aIt3 $pause | ||||
vgl fE*gl'aIC@ | vgl fE*gl'aIC@ | ||||
z.b tsUmb'aISpi:l | |||||
(z . b .) tsUmb'aISpi:l | |||||
// definite article | // definite article |
* - : ? b d D dZ | * - : ? b d D dZ | ||||
f g h j k l L l/2 | f g h j k l L l/2 | ||||
l/3 m n N p r R s | l/3 m n N p r R s | ||||
S t T tS v w z | |||||
S t T tS v w | |||||
Dictionary hu_dict | Dictionary hu_dict | ||||
Dictionary fr_dict | Dictionary fr_dict | ||||
@ @- @2 a A A~ e E | |||||
E2 E: E~ i i- i: o o2 | |||||
o3 O~ u u: w w^i W~ y | |||||
@ @- a A~ e E E2 E: | |||||
E~ i i: o O o2 o3 O~ | |||||
u u: w W w^a w^i W~ y | |||||
Y | Y | ||||
: b d dZ f g h j | : b d dZ f g h j | ||||
Dictionary ta_dict | Dictionary ta_dict | ||||
a a: aI aU e E e: i | a a: aI aU e E e: i | ||||
I i: o o: U u u: V | |||||
V# | |||||
I i: o o: U u u: U: | |||||
V V# | |||||
: ; b C d d. dZ f | : ; b C d d. dZ f | ||||
g h H j k l l. m | g h H j k l l. m | ||||
Dictionary is_dict | Dictionary is_dict | ||||
& @- a aI aU e E eI | |||||
i I o O oU oU2 u W | |||||
y y# Yy | |||||
@- a a: aI aI: aU aU: E | |||||
E: eI eI: i I i: I: O | |||||
O: OI oU oU: u u: W W: | |||||
y y: yI Yy Yy: | |||||
* ** : ; b c C d | * ** : ; b c C d | ||||
D f g h j J k l | D f g h j J k l | ||||
l# m m# n N n# N# n^ | l# m m# n N n# N# n^ | ||||
n^# p Q r R r# R2 s | n^# p Q r R r# R2 s | ||||
s2 t T tl# v x z | |||||
S s2 t T tl# v x z | |||||
Dictionary it_dict | Dictionary it_dict | ||||
v w x z | v w x z | ||||
Dictionary sl_dict | |||||
& @ a E e i O o | |||||
u y | |||||
: b d dZ dz f g h | |||||
j k l l^ m n N n^ | |||||
p R R^ s S t tS ts | |||||
v w x z Z | |||||
Dictionary tr_dict | Dictionary tr_dict | ||||
a e E i I o O u | a e E i I o O u | ||||
b c d D f g h j | b c d D f g h j | ||||
J k kh l m n N n^ | J k kh l m n N n^ | ||||
p Q r s s. s; t t[ | |||||
tS; v w x z Z z. | |||||
p Q r s s. t t[ tS; | |||||
v w x z Z z. | |||||
Dictionary zh_dict | Dictionary zh_dict | ||||
p ph Q q R r. s S | p ph Q q R r. s S | ||||
s. t T t. th th. v x | s. t T t. th th. v x | ||||
z Z z. | z Z z. | ||||
Dictionary bg_dict | |||||
@ a e i o u | |||||
; b C d d; dZ dz f | |||||
g j k l L l^ m n | |||||
n^ p r s S s; t t; | |||||
tS ts v x z Z z; |
//stress symbols ' primary , secondary % unstressed | //stress symbols ' primary , secondary % unstressed | ||||
// Conditional rules | // Conditional rules | ||||
// ?2 Use long 'a' in 'bath' | |||||
// ?3 General American | // ?3 General American | ||||
// ?!3 Not General American | // ?!3 Not General American | ||||
// ?5 split [3:] er [3:], ir [IR], ur [VR] | // ?5 split [3:] er [3:], ir [IR], ur [VR] | ||||
wwii dVb@Lju:dVb@Lju:t'u: | wwii dVb@Lju:dVb@Lju:t'u: | ||||
xxx $abbrev // not roman 30 | xxx $abbrev // not roman 30 | ||||
xy $abbrev | xy $abbrev | ||||
yd jA@d | |||||
nd $only | nd $only | ||||
aries e@ri:z | aries e@ri:z | ||||
arithmetic a2rITm@tIk | arithmetic a2rITm@tIk | ||||
arise a2raIz | arise a2raIz | ||||
arisen a2rIz@n | |||||
arisen @rIz@n | |||||
armslength ,A@mzl'ENT | armslength ,A@mzl'ENT | ||||
arouse a2raUz | arouse a2raUz | ||||
asbestos asb'Est@s | asbestos asb'Est@s | ||||
electricity I2lEktr'IsI2tI | electricity I2lEktr'IsI2tI | ||||
electrode I2lEktroUd | electrode I2lEktroUd | ||||
electron I2lEktr0n | electron I2lEktr0n | ||||
electrocute $2 | |||||
elicit I2lIsI2t | elicit I2lIsI2t | ||||
eligible ElI2dZ@b@L | eligible ElI2dZ@b@L | ||||
élite Il'i:t | élite Il'i:t | ||||
Lenore lEn'o@ | Lenore lEn'o@ | ||||
Leroy li:rOI | Leroy li:rOI | ||||
Liam li:@m | Liam li:@m | ||||
Llewellyn L@w'ElIn | |||||
Lois loUIs | Lois loUIs | ||||
Louis lu:I | Louis lu:I | ||||
Louise lu:w'i:z | Louise lu:w'i:z | ||||
was %w0z $pastf $only | was %w0z $pastf $only | ||||
?3 was %wVz $pastf $only | ?3 was %wVz $pastf $only | ||||
?3 wasn't wVznt $pastf $only | ?3 wasn't wVznt $pastf $only | ||||
(was a) w%0za2 | |||||
(was the) w%0zD@2 | |||||
wast %w0st $only $pastf $only | wast %w0st $only $pastf $only | ||||
were %w3: $pastf $only | were %w3: $pastf $only | ||||
isn't ,Iz@nt $pastf $strend2 | isn't ,Iz@nt $pastf $strend2 | ||||
still $verbf | still $verbf | ||||
already O:lrEdI $u2 $verbf $strend2 | already O:lrEdI $u2 $verbf $strend2 | ||||
not ,n0t $verbextend $only $strend | |||||
not ,n0t $verbextend $onlys $strend | |||||
(not have) n0ta2v $pastf $u1 | (not have) n0ta2v $pastf $u1 | ||||
(not have) n0thav $pastf $atend | (not have) n0thav $pastf $atend | ||||
(not have to) ,n0thavt@5 $pastf $strend | (not have to) ,n0thavt@5 $pastf $strend |
// This file is UTF-8 encoded | // This file is UTF-8 encoded | ||||
// Conditional rules | // Conditional rules | ||||
// ?2 Use long 'a' in 'bath' | |||||
// ?3 General American | // ?3 General American | ||||
// ?!3 Not General American | // ?!3 Not General American | ||||
// ?5 split [3:] er [3:], ir [IR], ur [VR] | // ?5 split [3:] er [3:], ir [IR], ur [VR] | ||||
.group an | .group an | ||||
@) ana (_ 'A:n@ | @) ana (_ 'A:n@ | ||||
?2 C) an (c aan | |||||
C) an (c aan | |||||
c) an (c an | c) an (c an | ||||
f) an (c an | f) an (c an | ||||
n) an (c an | n) an (c an | ||||
p) an (c an | p) an (c an | ||||
?2 @m) an (d aan | |||||
?2 sl) an (d aan | |||||
?2 C) an (t aan | |||||
@m) an (d aan | |||||
sl) an (d aan | |||||
C) an (t aan | |||||
an (ath a2n | an (ath a2n | ||||
ann (eal a2n | ann (eal a2n | ||||
ann (ih a2n | ann (ih a2n | ||||
&) an (ce_ @n | &) an (ce_ @n | ||||
?8 &) an (ce_ a2n | ?8 &) an (ce_ a2n | ||||
fin) an (c 'an | fin) an (c 'an | ||||
?2 h) an (ce_ aan | |||||
?2 z) an (ce_ aan | |||||
h) an (ce_ aan | |||||
z) an (ce_ aan | |||||
&) an (cy @n | &) an (cy @n | ||||
adv) an (c an | adv) an (c an | ||||
_) an (cie eIn | _) an (cie eIn | ||||
_) confi (den k0nfI | _) confi (den k0nfI | ||||
_) co (nfis k0 | _) co (nfis k0 | ||||
_) co (nflu k0 | _) co (nflu k0 | ||||
_) co (ngress k0 | |||||
_) co (ngre k0 | |||||
congru k0ngru: | congru k0ngru: | ||||
_) co (ni k0 | _) co (ni k0 | ||||
_) co (njug k0 | _) co (njug k0 | ||||
.group el | .group el | ||||
_) el (A %Il | _) el (A %Il | ||||
_) ele (ctro %Il,E | _) ele (ctro %Il,E | ||||
_) ele (ctrol %IlE | |||||
_) ele (ctron ElE | _) ele (ctron ElE | ||||
_) ele (g ElI | _) ele (g ElI | ||||
_) elem ElIm | _) elem ElIm | ||||
ent) i (ce aI | ent) i (ce aI | ||||
@) i (ce_ I2 | @) i (ce_ I2 | ||||
@) i (ced_ I2 | @) i (ced_ I2 | ||||
off) ice I2s | |||||
serv) ice I2s | |||||
@) i (cence I | @) i (cence I | ||||
_) ich Ik | _) ich Ik | ||||
&) i (ciCe_ =I | &) i (ciCe_ =I | ||||
?7 io (_ =i:oU | ?7 io (_ =i:oU | ||||
b) io aIoU | b) io aIoU | ||||
b) io (logy aI0 | b) io (logy aI0 | ||||
card) io I2oU | |||||
v) io aI0 | v) io aI0 | ||||
io (li_ I2'oU | io (li_ I2'oU | ||||
&) ion (_ =i@n | &) ion (_ =i@n | ||||
w) orce (st U | w) orce (st U | ||||
&f) or (d_ 3 | &f) or (d_ 3 | ||||
ore o@ | ore o@ | ||||
or (esis O@ | |||||
oresc @r'Es | oresc @r'Es | ||||
ora (cl 0r@ | ora (cl 0r@ | ||||
or (eB_ 0r | or (eB_ 0r | ||||
_) pre (mi prE | _) pre (mi prE | ||||
_) pre (miu pri: | _) pre (miu pri: | ||||
_) pre (mol pr%i: | _) pre (mol pr%i: | ||||
_) pre (nK prE | |||||
_) pre (p_ prE | _) pre (p_ prE | ||||
_) pre (posi prE | _) pre (posi prE | ||||
_) pre (qu pri: | _) pre (qu pri: | ||||
pri) s (o z | pri) s (o z | ||||
@) some (_S4 sVm | @) some (_S4 sVm | ||||
o) some (_S4 soUm | o) some (_S4 soUm | ||||
cro) ss (h s | |||||
ssion S@n | ssion S@n | ||||
ssion (_ =S@n | ssion (_ =S@n | ||||
?8 ssion (_ =SVn | ?8 ssion (_ =SVn | ||||
E (BCe_ @ | E (BCe_ @ | ||||
E (Cia 'i: | E (Cia 'i: | ||||
Ea (_ =i@ | Ea (_ =i@ | ||||
Ea (n_ 'i@ | |||||
@@) Ed (_S2vei d | @@) Ed (_S2vei d | ||||
&C) Ed (_S2vei d | &C) Ed (_S2vei d | ||||
&c) Ed (_S2vei t | &c) Ed (_S2vei t |
/ | / | ||||
// *************************************************************************** | // *************************************************************************** | ||||
// * Copyright (C) 2005 to 2007 by Jonathan Duddington * | |||||
// * Copyright (C) 2005 to 2010 by Jonathan Duddington * | |||||
// * email: [email protected] * | // * email: [email protected] * | ||||
// * * | // * * | ||||
// * This program is free software; you can redistribute it and/or modify * | // * This program is free software; you can redistribute it and/or modify * | ||||
// 2006-11-18 Gilles Casse <[email protected]> | // 2006-11-18 Gilles Casse <[email protected]> | ||||
// | // | ||||
// Updated 2010-04-01 Michel Such <[email protected]> | |||||
// Updated 2010-05-18 Michel Such <[email protected]> | |||||
// | // | ||||
// * Numbers, a few abbreviations and exceptions. | // * Numbers, a few abbreviations and exceptions. | ||||
// | // | ||||
_/ bar||oblik | _/ bar||oblik | ||||
_: d'Y||pw'E~ | _: d'Y||pw'E~ | ||||
_; pwE~||virg'yl | _; pwE~||virg'yl | ||||
_< E~feri-Yr | |||||
_< E~feriWr | |||||
_= egal | _= egal | ||||
_> syperi-Yr | |||||
_> syperiWr | |||||
_? pwE~||dE~tE2rogasj'O~ | _? pwE~||dE~tE2rogasj'O~ | ||||
_! pwE~||dEksklamasj'O~ | _! pwE~||dEksklamasj'O~ | ||||
_[ uvr@-_kroSE2 | _[ uvr@-_kroSE2 | ||||
@ _::arobaz | @ _::arobaz | ||||
% pursA~ $max3 | % pursA~ $max3 | ||||
& e $u $brk | & e $u $brk | ||||
_& _e_komErsi-'al | |||||
_& _e_komErsi'al | |||||
* asterisk: $max3 | * asterisk: $max3 | ||||
+ plys $max3 | + plys $max3 | ||||
~ tilde | ~ tilde | ||||
€ @ro | |||||
€ @r'o | |||||
¢ sEnt | ¢ sEnt | ||||
¥ iEn | ¥ iEn | ||||
£ livr | £ livr | ||||
÷ diviz'e_p'ar | ÷ diviz'e_p'ar | ||||
¼ W~_k'ar | ¼ W~_k'ar | ||||
½ W~_d@m'i | ½ W~_d@m'i | ||||
¾ trwa_k'ar | |||||
¾ trw^a_k'ar | |||||
© _^_EN | © _^_EN | ||||
® mark||depoz'e | ® mark||depoz'e | ||||
// numeric | // numeric | ||||
_0 zero $u+ | |||||
_0 zero2 $u+ | |||||
_1 W~ | _1 W~ | ||||
_2 dYz2 | |||||
_3 trwaz2 | |||||
_2 d@z2 | |||||
_3 trw^az2 | |||||
_4 katr | _4 katr | ||||
_5 sE~k | _5 sE~k | ||||
_6 siz3 | _6 siz3 | ||||
_14 katorz | _14 katorz | ||||
_15 kE~z | _15 kE~z | ||||
_16 sEz | _16 sEz | ||||
_17 dis:Et | |||||
_17 disEt | |||||
_18 dizw^it3 | _18 dizw^it3 | ||||
_19 diznYf | _19 diznYf | ||||
_20 vE~ | |||||
_20 vE~t2 | |||||
_21 vE~te:W~ | _21 vE~te:W~ | ||||
_22 vE~tdYz2 | _22 vE~tdYz2 | ||||
_23 vE~t:trwaz2 | |||||
_23 vE~t:trw^az2 | |||||
_24 vE~tkatr | _24 vE~tkatr | ||||
_25 vE~tsE~k | _25 vE~tsE~k | ||||
_26 vE~tsiz3 | _26 vE~tsiz3 | ||||
_41 karA~te:W~ | _41 karA~te:W~ | ||||
_5X sE~kA~t | _5X sE~kA~t | ||||
_51 sE~kA~te:W~ | _51 sE~kA~te:W~ | ||||
_6X swasA~t: | |||||
_61 swasA~te:W~ | |||||
_71 swasA~te:O~z | |||||
_6X sw^asA~t | |||||
_61 sw^asA~te:W~ | |||||
_71 sw^asA~te:O~z | |||||
_8X katr@vE~: | _8X katr@vE~: | ||||
_80 katr@vE~z2 | _80 katr@vE~z2 | ||||
_0C sA~ | _0C sA~ | ||||
?2 _9X nonA~t | ?2 _9X nonA~t | ||||
?2 _91 nonA~te:W~ | ?2 _91 nonA~te:W~ | ||||
(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 | |||||
(21 ème) vE~te:yniEm | |||||
(31 ème) trA~te:yniEm | |||||
(41 ème) karA~te:yniEm | |||||
(51 ème) sE~kA~te:yniEm | |||||
(61 ème) sw^asA~te:yniEm | |||||
(81 ème) katr@vE~:yniEm | |||||
// ABBREVIATIONS | // ABBREVIATIONS | ||||
//************** | //************** | ||||
amd aEmde | amd aEmde | ||||
aol aoEl | aol aoEl | ||||
api apei | api apei | ||||
ascii aski | |||||
avg $abbrev | avg $abbrev | ||||
avh aveaS | avh aveaS | ||||
bay _^_en | bay _^_en | ||||
divx diviks | divx diviks | ||||
ebay _^_en | ebay _^_en | ||||
(e bay) ebay $text | (e bay) ebay $text | ||||
ebcdic @besedik | |||||
edf @deEf | edf @deEf | ||||
eml @EmEl | eml @EmEl | ||||
etc E2tsetera | etc E2tsetera | ||||
mme madame $text | mme madame $text | ||||
mn minyt | mn minyt | ||||
mns minytz2 | mns minytz2 | ||||
(mp 3) _|Empetrwa | |||||
(mp 3) _|Empetrw^a | |||||
mr m@siY | mr m@siY | ||||
nsi $abbrev | nsi $abbrev | ||||
nsis $abbrev | nsis $abbrev | ||||
riscos riskoEs | riscos riskoEs | ||||
sap $abbrev | sap $abbrev | ||||
scsi $abbrev | scsi $abbrev | ||||
solaris solaris | |||||
sos $abbrev | sos $abbrev | ||||
s.t.p silt@:pl'E2 | s.t.p silt@:pl'E2 | ||||
s.v.p silvu:pl'E2 | s.v.p silvu:pl'E2 | ||||
// articles | // articles | ||||
le $nounf $u+ | le $nounf $u+ | ||||
le $verb $verbextend $u | le $verb $verbextend $u | ||||
el $u | |||||
el $u+ | |||||
los los $u+ | |||||
la $nounf $u+ | la $nounf $u+ | ||||
la $verb $verbextend $u | la $verb $verbextend $u | ||||
les lez2 $nounf $u+ | les lez2 $nounf $u+ | ||||
ou u $u $brk | ou u $u $brk | ||||
eh $u $brk | eh $u $brk | ||||
en $u | en $u | ||||
et e $u $brk | |||||
et _|e $u | |||||
ni $u | ni $u | ||||
car $u | car $u | ||||
car $noun | car $noun | ||||
alors alor $u+ | alors alor $u+ | ||||
aussi $u+ | aussi $u+ | ||||
encore $u+ | encore $u+ | ||||
enfin $u+ | |||||
depuis $u+ | depuis $u+ | ||||
lors $u+ | |||||
certes $u+ | certes $u+ | ||||
vers $noun | vers $noun | ||||
en $u+ | en $u+ | ||||
en $u+ $verb $verbextend | en $u+ $verb $verbextend | ||||
(en suspens) A~||sysp'A~ | |||||
suspense syspEns | |||||
(en tous) A~||tuz2 $u+ | (en tous) A~||tuz2 $u+ | ||||
par $u+ | par $u+ | ||||
parmi $u+ | parmi $u+ | ||||
entre $verb | entre $verb | ||||
contre $u+ | contre $u+ | ||||
chaque $u+ | chaque $u+ | ||||
chez $u+ | |||||
plusieurs $u+ | plusieurs $u+ | ||||
durant $u+ | durant $u+ | ||||
avec $u+ $brk | avec $u+ $brk | ||||
plus $u+ | plus $u+ | ||||
guère $u+ | guère $u+ | ||||
jamais $u+ | jamais $u+ | ||||
toujours $u+ | |||||
non nO~ $u+ | non nO~ $u+ | ||||
oui _|wi $u+ | oui _|wi $u+ | ||||
tel $u+ | tel $u+ | ||||
telle $u+ | telle $u+ | ||||
telles $u+ | telles $u+ | ||||
tout t'ut2 | |||||
rien ri-'E~n2 | |||||
tout t'ut2 $u+ | |||||
tous $u+ | |||||
toute t'ut $u+ | |||||
toutes t'utz2 $u+ | |||||
rien ri'E~n2 $u+ | |||||
// Letters which can be words | // Letters which can be words | ||||
//=========================== | //=========================== | ||||
(1 èrement) pr@mjErmA~ | (1 èrement) pr@mjErmA~ | ||||
monsieur m@sjY | |||||
messieurs mesjYz2 | |||||
(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~ | ||||
armageddon armagedO~ | armageddon armagedO~ | ||||
auvent ovA~ | auvent ovA~ | ||||
beta beta | beta beta | ||||
bien bi-E~n2 | |||||
bien biE~n2 | |||||
bis bis | bis bis | ||||
bissus bisys | bissus bisys | ||||
blues _^_en | blues _^_en | ||||
doppler doplEr | doppler doplEr | ||||
éloquent elokA~t2 | éloquent elokA~t2 | ||||
enfer A~fEr | enfer A~fEr | ||||
fahrenheit far@najt | |||||
faut fot2 $u+ | faut fot2 $u+ | ||||
fier fjer $verb | fier fjer $verb | ||||
for $u+ | |||||
francis frA~sis | francis frA~sis | ||||
fred frEd | fred frEd | ||||
free fri: | free fri: | ||||
fuel fjul | fuel fjul | ||||
gangster gA~gstEr | gangster gA~gstEr | ||||
gars ga | gars ga | ||||
genesis Zenezis | |||||
georges ZorZ | georges ZorZ | ||||
gilles Zil | gilles Zil | ||||
gin dZin | gin dZin | ||||
granit granitt $text | |||||
gulf gYlf | gulf gYlf | ||||
gus gys | gus gys | ||||
gym Zim | gym Zim | ||||
hélas elas $u+ | hélas elas $u+ | ||||
jacques Zak | jacques Zak | ||||
karaoke karaoke | karaoke karaoke | ||||
kevin kevin | |||||
laser lazEr | laser lazEr | ||||
listbox listboks | listbox listboks | ||||
louis lwi | louis lwi | ||||
mas mas | mas mas | ||||
mat mat | mat mat | ||||
merguez mErgEz | merguez mErgEz | ||||
mieux mi-Y $u+ | |||||
messieurs mesjYz2 | |||||
mieux miY $u+ | |||||
monsieur m@sjY | |||||
mrs _^_en | mrs _^_en | ||||
oasis oazis | |||||
ours urs | ours urs | ||||
pataquès patakEs | pataquès patakEs | ||||
peter pi:tYr | |||||
patchwork patSwWrk | |||||
peter pi:tWr | |||||
phallus falys | phallus falys | ||||
polder poldEr | polder poldEr | ||||
premier pr@mjer2 | premier pr@mjer2 | ||||
program _^_en | program _^_en | ||||
(program files) program||fajlz | |||||
(program files) programfajlz | |||||
query kueri | query kueri | ||||
queries kueri | queries kueri | ||||
quid kwid $u+ | quid kwid $u+ | ||||
quit _^_en | |||||
recorder rikordYr | |||||
quit kwit | |||||
recorder rikOrdWr | |||||
requiem rekw^ijEm | requiem rekw^ijEm | ||||
revolver revolvEr | |||||
revolver revOlvEr | |||||
sas sas | sas sas | ||||
scan skan | scan skan | ||||
scanner skaner2 $verb | scanner skaner2 $verb | ||||
scanner skanYr $noun | |||||
scanners skanYr | |||||
scanner skanWr $noun | |||||
scanners skanWr | |||||
shampoing SA~pwE~ | shampoing SA~pwE~ | ||||
sir _^_EN | |||||
sir sWr | |||||
souris suri | souris suri | ||||
stocker stoker2 | stocker stoker2 | ||||
sus sys | sus sys | ||||
vaut $u+ | vaut $u+ | ||||
vaux $u+ | vaux $u+ | ||||
vénus venys | vénus venys | ||||
vot vot | |||||
vot vOt | |||||
writer raitWr | |||||
yves iv | yves iv | ||||
// urt (t is said) | // urt (t is said) | ||||
kurt kurt | kurt kurt | ||||
yaourt _|i-aurt | |||||
yoghourt _|i-ogurt | |||||
yogourt _|i-ogurt | |||||
yaourt _|iaurt | |||||
yoghourt _|iogurt | |||||
yogourt _|iogurt | |||||
// ort (t said) | // ort (t said) | ||||
short Sort | short Sort | ||||
about _^_en | about _^_en | ||||
acer asEr | acer asEr | ||||
and _^_en | and _^_en | ||||
amazon amaz'on | |||||
amazon amaz'On | |||||
apple _^_en | apple _^_en | ||||
at at $u+ | at at $u+ | ||||
(audible manager) od,ibl||manadZ'Yr | (audible manager) od,ibl||manadZ'Yr | ||||
emacs E2maks | emacs E2maks | ||||
emacspeak E2makspi:k | emacspeak E2makspi:k | ||||
end _^_en | end _^_en | ||||
epson E2pson | |||||
espeak @spi:k | espeak @spi:k | ||||
ethernet etErnEt | ethernet etErnEt | ||||
exit egzit | exit egzit | ||||
(file zilla) f,ajl||zij'a | (file zilla) f,ajl||zij'a | ||||
from from $u | |||||
from frOm $u | |||||
get _^_en | get _^_en | ||||
google gug=Yl | |||||
gnome gnom | |||||
google gug=Wl | |||||
gnome gnOm | |||||
gnu $abbrev | gnu $abbrev | ||||
hamburger _|A~b@rgYr | |||||
hamburger _|A~b@rgWr | |||||
help _^_en | help _^_en | ||||
hot _^_en | hot _^_en | ||||
in in $u+ | in in $u+ | ||||
inside _^_en | inside _^_en | ||||
internet E~tErn'Et | internet E~tErn'Et | ||||
(internet explorer) E~tErn'Et||E2ksplor'Yr | |||||
klaxon klakson | |||||
(internet explorer) E~tErn'Et||E2ksplor'Wr | |||||
klaxon klaksOn | |||||
let _^_en | let _^_en | ||||
lite _^_en | lite _^_en | ||||
login _^_en | login _^_en | ||||
(mac os x) makoEsiks | (mac os x) makoEsiks | ||||
made _^_en | made _^_en | ||||
media medja | media medja | ||||
messenger mE2sEnZYr | |||||
messenger mE2sEnZWr | |||||
my maj $u+ | my maj $u+ | ||||
nat nat | nat nat | ||||
not _^_en | not _^_en | ||||
null _^_en | null _^_en | ||||
ok oke $u+ | ok oke $u+ | ||||
open op'Yn | |||||
(open source) op,Yn||s'urs | |||||
open op'Wn | |||||
(open source) op,Wn||s'urs | |||||
outlook autlu:k | outlook autlu:k | ||||
paint _^_en | paint _^_en | ||||
paper _^_en | paper _^_en | ||||
redhat rEdat | redhat rEdat | ||||
same _^_en | same _^_en | ||||
sametime _^_en | sametime _^_en | ||||
schubert SubEr | |||||
sun _^_en | sun _^_en | ||||
(text aloud) tEkst||@la=wd | (text aloud) tEkst||@la=wd | ||||
ubuntu ubuntu | ubuntu ubuntu | ||||
contentions kO~tA~tjO~z2 | contentions kO~tA~tjO~z2 | ||||
dations datjO~z2 | dations datjO~z2 | ||||
désertions dezErtjO~z2 $verb | désertions dezErtjO~z2 $verb | ||||
exploitions EksplwatjO~z2 | |||||
exploitions Eksplw^atjO~z2 | |||||
heurtions hYrtjO~z2 | heurtions hYrtjO~z2 | ||||
partions partjO~z2 | partions partjO~z2 | ||||
rations ratjO~z2 $verb | rations ratjO~z2 $verb | ||||
laos laos | laos laos | ||||
lesotho lezoto | lesotho lezoto | ||||
liechtenstein liStYnStajn | liechtenstein liStYnStajn | ||||
angeles A~nZelEs | |||||
malawi malawi | malawi malawi | ||||
mayotte majot | mayotte majot | ||||
montréal mO~real | montréal mO~real | ||||
tuvalu tuvalu | tuvalu tuvalu | ||||
vanuatu vanuatu | vanuatu vanuatu | ||||
venezuela venezyela | venezuela venezyela | ||||
(viêt nam) vi-Etnam | |||||
(viêt nam) viEtnam | |||||
wallis walis | wallis walis | ||||
futuna futuna | futuna futuna | ||||
zimbabwe zimbabwe | zimbabwe zimbabwe |
// French translation rules for Espeak | // French translation rules for Espeak | ||||
// *************************************************************************** | // *************************************************************************** | ||||
// * Copyright (C) 2005 to 2007 by Jonathan Duddington * | |||||
// * Copyright (C) 2005 to 2010 by Jonathan Duddington * | |||||
// * email: [email protected] * | // * email: [email protected] * | ||||
// * * | // * * | ||||
// * This program is free software; you can redistribute it and/or modify * | // * This program is free software; you can redistribute it and/or modify * | ||||
// 2006-11-18 Gilles Casse <[email protected]> | // 2006-11-18 Gilles Casse <[email protected]> | ||||
// | // | ||||
// Updated: 2010-04-01 Michel Such <[email protected]> | |||||
// Updated: 2010-05-18 Michel Such <[email protected]> | |||||
// | // | ||||
// Letter classes: | // Letter classes: | ||||
.group a | .group a | ||||
ae (_ e // reggae vitae | ae (_ e // reggae vitae | ||||
aen A~ // caen (diff Cicero: aA~) | aen A~ // caen (diff Cicero: aA~) | ||||
ae ae // maestro | |||||
aim (K W~ // faim | |||||
ae aE // maestro | |||||
aim (K E~ // faim | |||||
ain (K E~ // pain | ain (K E~ // pain | ||||
Ct) ain (_ E~n2 // certain ami | Ct) ain (_ E~n2 // certain ami | ||||
ch) ain (_ E~n2 // prochain arret | ch) ain (_ E~n2 // prochain arret | ||||
ait (_ E2t2 // dirait ferait... | ait (_ E2t2 // dirait ferait... | ||||
aient (_ E2t2 // diraient feraient... | aient (_ E2t2 // diraient feraient... | ||||
f) ai (sA @ // faisons faisan | f) ai (sA @ // faisons faisan | ||||
a (ill a | |||||
a (ils_ a | |||||
a (il_ a | |||||
a (ilK a | |||||
aie (me E2 // paiement | aie (me E2 // paiement | ||||
ai E // aile | ai E // aile | ||||
ai (L06 E // aile | ai (L06 E // aile | ||||
a (nnA a // manne | a (nnA a // manne | ||||
an (K A~ // ancien, 矇lan | an (K A~ // ancien, 矇lan | ||||
an (h an | |||||
@@m) an (_ an // tennisman | @@m) an (_ an // tennisman | ||||
zm) an (_ an // jazzman | zm) an (_ an // jazzman | ||||
L02m) an (_ an | L02m) an (_ an | ||||
lism) an (_ A~ // talisman | lism) an (_ A~ // talisman | ||||
ulm) an (_ A~ // musulman | ulm) an (_ A~ // musulman | ||||
簿m) an (_ A~ // ca簿man | |||||
_ca簿m) an (_ A~ // ca簿man | |||||
_C) aon (_ A~ // faon, paon, taon | _C) aon (_ A~ // faon, paon, taon | ||||
s) aoul (_ u // saoul | s) aoul (_ u // saoul | ||||
s) aou (le u // saoule | s) aou (le u // saoule | ||||
au (re_ o // dinosaure | au (re_ o // dinosaure | ||||
_) audio (@P5 o2dio | _) audio (@P5 o2dio | ||||
_) auto (@P4 o2to | _) auto (@P4 o2to | ||||
_) autom (n o2to | |||||
_) autom (n otO | |||||
bb) aye (X ei // abbaye | bb) aye (X ei // abbaye | ||||
ay (C E // aym矇 | ay (C E // aym矇 | ||||
ay Ej // paye | ay Ej // paye | ||||
ay (_ E2 // display | ay (_ E2 // display | ||||
Xl) ayer (X E2jYr // player, layer | |||||
Xl) ayer (X E2jWr // player, layer | |||||
w) an (_ an | w) an (_ an | ||||
a a // bateau | a a // bateau | ||||
a) ch (_ k // almanach | a) ch (_ k // almanach | ||||
ar) c (ti // arctique | ar) c (ti // arctique | ||||
e) ch (_ k // varech | e) ch (_ k // varech | ||||
ni) ch (_ k | |||||
_A) ch (o_ k // 矇cho | _A) ch (o_ k // 矇cho | ||||
mani) ch (矇 k // manich矇isme | mani) ch (矇 k // manich矇isme | ||||
wi) ch tS // sandwich | wi) ch tS // sandwich | ||||
_) ch (orA k // chorale | _) ch (orA k // chorale | ||||
_) ch (oriz S | _) ch (oriz S | ||||
_) ch (oro S | _) ch (oro S | ||||
te) ch (_ k | |||||
ch (r k // chr矇tien | ch (r k // chr矇tien | ||||
_) chrono (@P6 krono | _) chrono (@P6 krono | ||||
ch (l k | ch (l k | ||||
ck k // nickel | ck k // nickel | ||||
cqu k // grecque | cqu k // grecque | ||||
cq k // pecq | cq k // pecq | ||||
s) c (Y // | |||||
s) c (Y | |||||
x) c (Y | x) c (Y | ||||
c (Y s // c癡de | c (Y s // c癡de | ||||
_) cyber (P5 sibEr | _) cyber (P5 sibEr | ||||
c k // recoin donc | c k // recoin donc | ||||
cient (_ sit2 // ils appr嚙箠ent, remercient. | cient (_ sit2 // ils appr嚙箠ent, remercient. | ||||
effi) cien (t sjA~ // coefficient | |||||
d矇fi) cien (t sjA~ // d矇ficient | |||||
effi) cient sjA~ // coefficient | |||||
d矇fi) cient sjA~ // d矇ficient | |||||
cast (_S4 kast // podcast | cast (_S4 kast // podcast | ||||
casts (_S5 kast // podcasts | casts (_S5 kast // podcasts | ||||
_) clown klun | _) clown klun | ||||
.group d | .group d | ||||
dd d // addition | dd d // addition | ||||
_) d' (P2 d | _) d' (P2 d | ||||
_ban) d (_ d | |||||
_lan) d (_ d // land | _lan) d (_ d // land | ||||
_stan) d (_ d // stand | _stan) d (_ d // stand | ||||
an) d (_ | an) d (_ | ||||
_gran) d (_ t2 // grand ami, grand marchand | _gran) d (_ t2 // grand ami, grand marchand | ||||
Cen) d (_ t2 | Cen) d (_ t2 | ||||
Con) d (_ | Con) d (_ | ||||
con) d (_ t2 | |||||
quen) d (_ t2 | quen) d (_ t2 | ||||
r) d (_ | r) d (_ | ||||
_har) d (_ d | _har) d (_ d | ||||
// Define use of the final 'e' in french | // Define use of the final 'e' in french | ||||
e (_ | e (_ | ||||
_C) e (_ @2 // je te | |||||
_C) e (_ @ // je te | |||||
-c) e (_ | -c) e (_ | ||||
-j) e (_ | -j) e (_ | ||||
C) e (- | C) e (- | ||||
pl) ein (_ E~n2 // plein emploi | pl) ein (_ E~n2 // plein emploi | ||||
e (il E // vieille | e (il E // vieille | ||||
ei E // neige | ei E // neige | ||||
eoi wa // asseoir | |||||
eoi w^a // asseoir | |||||
ell El // selle | ell El // selle | ||||
el (K El // celsius, caramel | el (K El // celsius, caramel | ||||
_f) em (me a // femme | _f) em (me a // femme | ||||
@ch) e (CrA | @ch) e (CrA | ||||
@L06ch) e (CrA @ | @L06ch) e (CrA @ | ||||
@L06C) e (CrA @ | @L06C) e (CrA @ | ||||
@L06C) e (rrA E | |||||
@CL06) e (CrA @ | @CL06) e (CrA @ | ||||
%C) e (CrA++ | %C) e (CrA++ | ||||
e (rr+++ E | e (rr+++ E | ||||
_) e (CA e | _) e (CA e | ||||
_) e (xC++ E2 | _) e (xC++ E2 | ||||
Cr) eam i:m | Cr) eam i:m | ||||
Cr) eamer i:mYr | |||||
Cl) eaner i:nYr | |||||
vert) e (rX Y | |||||
Cr) eamer i:mWr | |||||
Cl) eaner i:nWr | |||||
vert) e (rX W | |||||
e簿n (_ 'Ein | e簿n (_ 'Ein | ||||
_y) en (_ En | _y) en (_ En | ||||
iew) er (X er2 | iew) er (X er2 | ||||
.group 癡 | .group 癡 | ||||
Z) 癡me i-Em | |||||
Z) 癡me iEm | |||||
癡 E | 癡 E | ||||
癡s (_ E | 癡s (_ E | ||||
Ar) 癡s (_ Es | Ar) 癡s (_ Es | ||||
su) gg (Y gZ // sugg矇rer suggestif | su) gg (Y gZ // sugg矇rer suggestif | ||||
gg g // agglom矇rer | gg g // agglom矇rer | ||||
ai) gni n^ // craignions ch璽taignier | ai) gni n^ // craignions ch璽taignier | ||||
gn n^ // agneau | |||||
gn nj // agneau | |||||
gni n^i // signifier | |||||
gn (e_ n^ | |||||
gn (_ n^ | |||||
gn (eCA nj@- | |||||
gn (ie n // compagnie | gn (ie n // compagnie | ||||
dia) g (no g | dia) g (no g | ||||
_a) g (no g | |||||
_quatrevin) gts (_ z2 | _quatrevin) gts (_ z2 | ||||
vin) gt (_A t // liaison: vingt ans | vin) gt (_A t // liaison: vingt ans | ||||
.group h | .group h | ||||
_) h _| | _) h _| | ||||
Ca) h (_ h | |||||
_) h (abi // habit, habilleur | _) h (abi // habit, habilleur | ||||
_) h (allo // hallog癡ne | _) h (allo // hallog癡ne | ||||
_) h (ame // hame癟on | _) h (ame // hame癟on | ||||
_) h (umi // humide | _) h (umi // humide | ||||
_) h (umo // humour | _) h (umo // humour | ||||
_) hy (A j | _) hy (A j | ||||
haus (_ o2s //blockhaus | |||||
heim (_ ajm | |||||
_) h (y // hypermarch矇 | _) h (y // hypermarch矇 | ||||
_) hyper (@P5 ipEr | _) hyper (@P5 ipEr | ||||
_) hyper (_ ipEr | _) hyper (_ ipEr | ||||
.group i | .group i | ||||
i i // cri | i i // cri | ||||
C) i (A i- | |||||
C) i (onK j | |||||
r) i (onK i- | |||||
C) i (erA i | C) i (erA i | ||||
l) i (A i | |||||
_) i (A i- | |||||
C) i (e_ i | |||||
C) i (es_ i | |||||
Cr) i (a i: | |||||
_Cr) i (A i: | |||||
Cr) i (矇 i: | |||||
Cr) i (er_ i: | |||||
rr) i (er_ i- | |||||
C) ien (t_ i | C) ien (t_ i | ||||
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 | |||||
d矇v) ien (t_ i | |||||
t) ien (K_ iE~ // tient | |||||
v) ien (K_ iE~ // vient | |||||
at) ien (t_ jA~ // patient | |||||
cip) ien (C jA~ // r矇cipient | |||||
cl) ien (C i:A~ // client | cl) ien (C i:A~ // client | ||||
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 | |||||
mol) ien (C jA~ // 矇molient | |||||
v矇n) ien (C jA~ // inconv矇nient | |||||
or) ien (t jA~ // orient, orienter | |||||
ot) ien (t_ jA~ // quotient | |||||
i (e_ i | i (e_ i | ||||
_) ill il // ill矇gal | _) ill il // ill矇gal | ||||
in (kX iN // link | in (kX iN // link | ||||
in (n i // innombrable | in (n i // innombrable | ||||
in (C E~ // vingt | in (C E~ // vingt | ||||
in (_ W~ // vin | |||||
in (_ E~ // vin | |||||
ing (_ iN | ing (_ iN | ||||
ing (s iN | |||||
ing (to iN | |||||
_) infra (sP5 E~fra | _) infra (sP5 E~fra | ||||
_) inter (@@P5 E~tEr | _) inter (@@P5 E~tEr | ||||
_) interr (A E~tEr | _) interr (A E~tEr | ||||
bor) is (_ is | bor) is (_ is | ||||
dor) is (_ is | dor) is (_ is | ||||
tor) is (_ is | tor) is (_ is | ||||
fl) irt Yrt | |||||
fl) irt Wrt | |||||
otl) i (neX aj | otl) i (neX aj | ||||
onl) i (ne_ aj | onl) i (ne_ aj | ||||
offl) i (ne_ aj | offl) i (ne_ aj | ||||
ram_f) i (le _^_en | ram_f) i (le _^_en | ||||
.group 簿 | |||||
簿n (C E~ // co簿ncider | |||||
簿n (_ E~ | |||||
簿s (K is // ma簿s, archa簿sme | |||||
簿 (q i // archa簿que | |||||
簿 (c i // la簿c | |||||
a) 簿 (A j // a簿eul | |||||
a) 簿 (C i // na簿f | |||||
tha) 簿 (K j // tha簿 | |||||
_ha) 簿 (K i // ha簿r | |||||
簿 i // ambigu簿t矇 | |||||
.group j | .group j | ||||
j Z // adjoint joujoux | j Z // adjoint joujoux | ||||
_) j' (P2v Z | _) j' (P2v Z | ||||
au) lt // h矇rault | au) lt // h矇rault | ||||
uCi) l (_ // outil, fusil | uCi) l (_ // outil, fusil | ||||
nti) l (_ // gentil | nti) l (_ // gentil | ||||
nti) lh j // gentilhomme | |||||
ui) ll j // juillet | ui) ll j // juillet | ||||
_) lorsqu' (P7 lorsk | _) lorsqu' (P7 lorsk | ||||
x_) os (_ o | x_) os (_ o | ||||
o (t_ o | o (t_ o | ||||
oe (ll wa // moelleux | |||||
oe (ll w^a // moelleux | |||||
oe (i Y // oeil | oe (i Y // oeil | ||||
_) oe (C Y // oesophage | _) oe (C Y // oesophage | ||||
_ph) oe (C e // phoetus | _ph) oe (C e // phoetus | ||||
_) oi (gnon o // oignons | _) oi (gnon o // oignons | ||||
oin (C wE~ | oin (C wE~ | ||||
oin (_ wE~ // coin | oin (_ wE~ // coin | ||||
oi wa // poil | |||||
o礙 (l wa // po礙le | |||||
oi w^a // poil | |||||
o礙 (l w^a // po礙le | |||||
om (C O~ // bombe | om (C O~ // bombe | ||||
om (m o // nommer | om (m o // nommer | ||||
om (ni om // omnibus | om (ni om // omnibus | ||||
_) on (z _|O~ // onze, onzi嚙練e | _) on (z _|O~ // onze, onzi嚙練e | ||||
_c) on (_ O~ // no comment | _c) on (_ O~ // no comment | ||||
gt) on (_ On // Washington | |||||
Cst) on (_ On | |||||
ps) on (_ On | |||||
_C) on (_ O~n2 // mon appui, mon histoire, mon havre | _C) on (_ O~n2 // mon appui, mon histoire, mon havre | ||||
alc) oo (l o // alcool | alc) oo (l o // alcool | ||||
ou u // hibou brouillard | ou u // hibou brouillard | ||||
ou (A w | |||||
r) ou (A u | |||||
ou (iA u | |||||
ou (il u | |||||
oue (mA u // d�ouement | |||||
_) ou (at _|u // ouate | _) ou (at _|u // ouate | ||||
o羅 u // o羅 | o羅 u // o羅 | ||||
o羶 u // co羶ter | o羶 u // co羶ter | ||||
oy (A waj // noyer voyelles | |||||
_b) oy (co oi- // boycott | |||||
oy (A w^aj // noyer voyelles | |||||
_b) oy (co oj // boycott | |||||
_c) oy (o oi // coyote | _c) oy (o oi // coyote | ||||
_y) o (y o | _y) o (y o | ||||
oy wa | |||||
oy w^a | |||||
o (_ o // zorro all矇gro | o (_ o // zorro all矇gro | ||||
o (z_ o // berlioz | o (z_ o // berlioz | ||||
o o | o o | ||||
// group o: English section | // group o: English section | ||||
oa (X _^_en // approach, load | oa (X _^_en // approach, load | ||||
oa (_ oa | |||||
oa (s_ oa | |||||
oa (CerX _^_en | oa (CerX _^_en | ||||
oach _^_en | oach _^_en | ||||
old (er_ _^_en // folder, older | old (er_ _^_en // folder, older | ||||
C) oing (_ _^_en // going | C) oing (_ _^_en // going | ||||
oo (Ce _^_en // boomer | oo (Ce _^_en // boomer | ||||
oo (k _^_en // book, cook | oo (k _^_en // book, cook | ||||
oo (st _^_en // booster | |||||
oo (X _^_en // pool | oo (X _^_en // pool | ||||
C) oot _^_en // bootable football | C) oot _^_en // bootable football | ||||
_) one _^_en | _) one _^_en | ||||
.group q | .group q | ||||
q k // coq | q k // coq | ||||
_) qu' (AP3 k | _) qu' (AP3 k | ||||
_) qua (d kwA // quadrature | |||||
_) qua (tA kwA // quaternaire | |||||
_) qua (d kwa // quadrature | |||||
_) qua (tA kwa // quaternaire | |||||
_) quan (tA kwA~ // quantique | _) quan (tA kwA~ // quantique | ||||
_) qua (drill ka // quadriller | _) qua (drill ka // quadriller | ||||
_a) qua kwA // aquarium | |||||
_a) qua kwa // aquarium | |||||
_a) qu (if ku // aquif癡re | _a) qu (if ku // aquif癡re | ||||
_A) qui (dist kw^i // 矇quidistant | _A) qui (dist kw^i // 矇quidistant | ||||
_A) qui (lat kw^i // 矇quilat矇ral | _A) qui (lat kw^i // 矇quilat矇ral | ||||
_C) qua kwA // squale square | |||||
_A) qua kwA // 矇quateur | |||||
d矇) qua kwA // adequate | |||||
_) qua (rtz kwA // quartz | |||||
_C) qua kwa // squale square | |||||
_A) qua kwa // 矇quateur | |||||
d矇) qua kwa // adequate | |||||
_) qua (rtz kwa // quartz | |||||
qu k // quatre | qu k // quatre | ||||
_) que (_ k@2 // que | |||||
_) que (_ k@ // que | |||||
n) q (_ k // cinq cent | n) q (_ k // cinq cent | ||||
// group q: English section | // group q: English section | ||||
sch (iz sk // schizophr癡ne | sch (iz sk // schizophr癡ne | ||||
sch (ol sk | sch (ol sk | ||||
sch (oo sk | sch (oo sk | ||||
schu Su | |||||
sch S // sch矇ma | sch S // sch矇ma | ||||
d矇) sh (A z // d矇shabiller | d矇) sh (A z // d矇shabiller | ||||
_) 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 | |||||
scien (t siA~ // conscient scientifique | |||||
sql (_S3 EskyEl | sql (_S3 EskyEl | ||||
_u) s (_ s | _u) s (_ s | ||||
r) t (_ | r) t (_ | ||||
aul) t (_ // Renault | aul) t (_ // Renault | ||||
grani) t (_ t | |||||
_) t矇l矇 (@P4 tele | _) t矇l矇 (@P4 tele | ||||
_) tele tele | |||||
_) thermo (@P6 tErmo | _) thermo (@P6 tErmo | ||||
tt t // attitude | tt t // attitude | ||||
_) ultra (P5 yltra | _) ultra (P5 yltra | ||||
g) u (ay u | g) u (ay u | ||||
g) ueill Yj // orgueilleux | g) ueill Yj // orgueilleux | ||||
g) ueil (_ Yj // orgueil | |||||
ha簿k) u (X u | |||||
C) u (bX Y // hub, club | C) u (bX Y // hub, club | ||||
C) u (gX Y // bug, mug | C) u (gX Y // bug, mug | ||||
_n) u (rse Y // nurse | _n) u (rse Y // nurse | ||||
r) u (nX Y // run, autorun | |||||
um (_ om // album | |||||
r) u (nX W // run, autorun | |||||
pr) unt (_ W~ // emprunt | |||||
um (_ Om // album | |||||
f) um (_ W~ // parfum | f) um (_ W~ // parfum | ||||
um (b W~ // humble | um (b W~ // humble | ||||
um (p W~ | um (p W~ | ||||
_) wir _^_en // wire | _) wir _^_en // wire | ||||
winn _^_en // winner | winn _^_en // winner | ||||
wise _^_en | wise _^_en | ||||
with _^_en | |||||
wor _^_en | wor _^_en | ||||
.group y | .group y | ||||
y i // cryog矇nique myope | y i // cryog矇nique myope | ||||
_) y (A j // yak, yacht | |||||
_) y (A _|j // yak | |||||
_) y (eu j // yeux | |||||
_) yacht _^_en // yacht, yachtman | _) yacht _^_en // yacht, yachtman | ||||
_) y (eu i- // yeux | |||||
_) yahoo (P5 i-a'u | |||||
ym (b E~ // symbolique | |||||
ym (p E~ // tympan | |||||
ym (_ E~ // thym | |||||
_) yahoo (P5 ja'u | |||||
ym (K E~ // tympan | |||||
y (nn i | y (nn i | ||||
y (nA i | y (nA i | ||||
X) ys (_ is | X) ys (_ is | ||||
z z | z z | ||||
t) z s // tzigane | t) z s // tzigane | ||||
t) zer (_ zEr | t) zer (_ zEr | ||||
C) zer (_ zYr | |||||
C) zer (_ zWr | |||||
.group | .group | ||||
矇 e // 矇t矇 | 矇 e // 矇t矇 | ||||
礙 E // f礙te | 礙 E // f礙te | ||||
簽 Ni // ni簽o | |||||
簿 i // na簿f | |||||
簿n (K E~ // co簿ncidence | |||||
簿s (_ is // ma簿s | |||||
繹 o // angstr繹m | 繹 o // angstr繹m | ||||
� Y | |||||
�u Y: // s�ur | |||||
羶 y: // f羶tes | 羶 y: // f羶tes | ||||
羹 y // b羹lcher | 羹 y // b羹lcher | ||||
_#-ának a:nAk | _#-ának a:nAk | ||||
_#-vel e:vEl $alt2 | _#-vel e:vEl $alt2 | ||||
_#-val a:vAl $alt2 | _#-val a:vAl $alt2 | ||||
_#-ánál a:na:l $alt2 | |||||
_#-énél e:ne:l $alt2 | |||||
(1-e) elseje $text $alt2 | (1-e) elseje $text $alt2 | ||||
(1-én) elsején $text $alt2 | (1-én) elsején $text $alt2 | ||||
(1-jén) elsején $text $alt2 | (1-jén) elsején $text $alt2 | ||||
(1-jéig) elsejéig $text $alt2 | (1-jéig) elsejéig $text $alt2 | ||||
(1-ének) elsejének $text $alt2 | (1-ének) elsejének $text $alt2 | ||||
(1-vel) elsejével $text $alt2 | (1-vel) elsejével $text $alt2 | ||||
(1-jénél) elsejénél $text $alt2 | |||||
(1-énél) elsejénél $text $alt2 | |||||
(2-i) másodikai $text $alt2 | (2-i) másodikai $text $alt2 | ||||
(2-ig) másodikáig $text $alt2 | (2-ig) másodikáig $text $alt2 | ||||
(3-i) hAR2_mAdikAi $alt2 | (3-i) hAR2_mAdikAi $alt2 | ||||
(0-an) nul:a:n | (0-an) nul:a:n | ||||
(0-ában) nul:a:bAn | (0-ában) nul:a:bAn | ||||
(0-ába) nul:a:bA | (0-ába) nul:a:bA | ||||
(0-áson) nul:a:Son | |||||
(0-tól) nul:a:to:l | |||||
(00-tól) nul:Anul:a:to:l | |||||
(1-gyet) EJ:Et | (1-gyet) EJ:Et | ||||
(1-gyes) EJ:ES | (1-gyes) EJ:ES | ||||
(2-őt) kEt:Y:t | (2-őt) kEt:Y:t | ||||
(3-adikat) hAR2mAdikAt //special exception | (3-adikat) hAR2mAdikAt //special exception | ||||
(3-adikon) hAR2mAdikon //special exception | (3-adikon) hAR2mAdikon //special exception | ||||
(3-adikkal) hAR2mAdik:Al //special exception | (3-adikkal) hAR2mAdik:Al //special exception | ||||
(3-t) ha:R2mAt | |||||
//4 number suffixes | //4 number suffixes | ||||
(4-el) ne:J:El //Nneed J: phoneme, not J phoneme contains one suffix) | (4-el) ne:J:El //Nneed J: phoneme, not J phoneme contains one suffix) | ||||
(4-gyel) ne:J:El //Need J: phoneme, not J phoneme | (4-gyel) ne:J:El //Need J: phoneme, not J phoneme | ||||
(7-től) hEtEdike:tY:l $alt2 | (7-től) hEtEdike:tY:l $alt2 | ||||
(7-tel) he:t:El | (7-tel) he:t:El | ||||
(7-el) he:t:El | (7-el) he:t:El | ||||
(7-sekre) hEtESEkR2E | |||||
(7-sel) hEtES:El | |||||
(8-cal) n^olts:Al | (8-cal) n^olts:Al | ||||
(8-al) n^olts:Al | (8-al) n^olts:Al | ||||
(9-el) kilEnts:El | (9-el) kilEnts:El | ||||
(9-cel) kilEnts:El | |||||
_10e tiz | _10e tiz | ||||
_20e hus | _20e hus | ||||
(10-szer) ti:s:ER2 | (10-szer) ti:s:ER2 | ||||
//special number exceptions | //special number exceptions | ||||
(10-el) ti:zzEl | (10-el) ti:zzEl | ||||
(20-al) hu:s:Al | (20-al) hu:s:Al | ||||
BAR bAR2 $allcaps | BAR bAR2 $allcaps | ||||
//SS EsEs $allcaps | //SS EsEs $allcaps | ||||
a.m An^n^i||m'int $dot | |||||
(a . m .) An^n^i||m'int | |||||
ún u:JnEvEzEt: $hasdot | ún u:JnEvEzEt: $hasdot | ||||
dr doktoR2 $dot | dr doktoR2 $dot | ||||
mr mistER2 $hasdot //in hungarian we not use, but lot of books contains this word. | mr mistER2 $hasdot //in hungarian we not use, but lot of books contains this word. | ||||
u.n u:JnEvEzEt: $hasdot | u.n u:JnEvEzEt: $hasdot | ||||
ú.n u:JnEvEzEt: $hasdot | ú.n u:JnEvEzEt: $hasdot | ||||
vö v'EZd||_'Yss2E | vö v'EZd||_'Yss2E | ||||
(u . i .) u:i: | |||||
látszott $unstressend | látszott $unstressend | ||||
látszanak $unstressend | látszanak $unstressend | ||||
látszotok $unstressend | látszotok $unstressend | ||||
körül $unstressend | |||||
körül $unstressend $alt3 | |||||
dőlt $unstressend | dőlt $unstressend | ||||
vér $unstressend | vér $unstressend | ||||
sót $unstressend | sót $unstressend | ||||
pénzt $unstressend | pénzt $unstressend | ||||
pénz $unstressend | pénz $unstressend | ||||
nép $unstressend | nép $unstressend | ||||
lennék $unstressend | |||||
lennél $unstressend | |||||
lennénk $unstressend | |||||
lennétek $unstressend | |||||
hitt $unstressend | |||||
fő $unstressend | |||||
// word pairs | // word pairs | ||||
_ˇ lEfEle:n^i:l | _ˇ lEfEle:n^i:l | ||||
_¡ AlSo:indEks | _¡ AlSo:indEks | ||||
// Main Exceptions List | // Main Exceptions List | ||||
//===================== | //===================== | ||||
(cd-n) cédén | (cd-n) cédén | ||||
(cd-d) cédéd | (cd-d) cédéd | ||||
(CD-d) cédéd | (CD-d) cédéd | ||||
CD-m) cédém | |||||
(cd-m) cédém | |||||
(db-os) darabos | (db-os) darabos | ||||
(db-ot) darabot | (db-ot) darabot | ||||
(LST-k) elesték | (LST-k) elesték | ||||
//after word and don't disturb Orca working. | //after word and don't disturb Orca working. | ||||
(PC-n) pécén | (PC-n) pécén | ||||
(USB-n) úesbén | (USB-n) úesbén | ||||
(usb-n) úesbén | |||||
(usb-t) úesbét | |||||
(USA-ból) usából | (USA-ból) usából | ||||
(USA-nak) usának | (USA-nak) usának | ||||
(DVD-k) dévédék | (DVD-k) dévédék | ||||
(dvd-n) dévédén | (dvd-n) dévédén | ||||
(dvd-d) dévédéd | (dvd-d) dévédéd | ||||
(DVD-d) dévédéd | (DVD-d) dévédéd | ||||
(DVD-m) dévédét | |||||
(dvd-m) dévédém | |||||
(USA-éval) usáéval | (USA-éval) usáéval | ||||
(ubuntu-n) ubuntun | (ubuntu-n) ubuntun | ||||
(hu-n) hun | (hu-n) hun | ||||
(USA-ban) usában | (USA-ban) usában | ||||
(USA-ba) usába | |||||
_) alattvaló AlAtvAlo: | _) alattvaló AlAtvAlo: | ||||
ahhoz Ahoz | ahhoz Ahoz | ||||
.group á | .group á | ||||
á a: | á a: | ||||
@) ában (_S4q a:bAn | @) ában (_S4q a:bAn | ||||
@) ának (_S4q a:nAk | @) ának (_S4q a:nAk | ||||
@) ától (_S4q a:to:l | @) ától (_S4q a:to:l | ||||
@) áig (_S3q a:ig | |||||
@) ára (_S3q a:R2A | |||||
.group b | .group b | ||||
b b | b b | ||||
tö) bb (ség b | tö) bb (ség b | ||||
tö) bb (nyire b | tö) bb (nyire b | ||||
tö) bb (nek b | tö) bb (nek b | ||||
tová) bb (ra b | |||||
tová) bbr (a bR2 | |||||
tö) bb (soro b | tö) bb (soro b | ||||
tö) bb (ny b | |||||
tö) bb (féle b | |||||
jo) bbr (a bR2 | |||||
tö) bbr (e bR2 | |||||
.group c | .group c | ||||
c ts | c ts | ||||
har) c (cselek ts | har) c (cselek ts | ||||
külön) c (sé ts | külön) c (sé ts | ||||
mala) c (sül ts | mala) c (sül ts | ||||
gyümöl) cs (zs tS | |||||
fil) c (csiz ts | |||||
szo) c (segély ts | |||||
.group ch | .group ch | ||||
anar) ch (i h | anar) ch (i h | ||||
ar) ch (ív h | ar) ch (ív h | ||||
ar) ch (ivál h | ar) ch (ivál h | ||||
ma) ch (iná h | ma) ch (iná h | ||||
oligar) ch h | |||||
legpe) ch (es h: | |||||
.group d | .group d | ||||
d d | d d | ||||
föl) d (szerzé d | föl) d (szerzé d | ||||
twee) dz (ak d|z | twee) dz (ak d|z | ||||
twee) dsz (ok d|s | twee) dsz (ok d|s | ||||
dtt t: //this letters need spokening longer t phoneme | |||||
_) kar) d (su d | |||||
zöl) d (sapk d | |||||
hí) d (szer d | |||||
szaba) d (szoft d | |||||
rövi) d (zár d | |||||
ren) d (zavar d | |||||
ügyvé) d (jel d | |||||
kez) dt t | |||||
tiné) dzs (e dZ | |||||
mene) dzs (me dZ | |||||
ná) d (szék d | |||||
rövi) d (soroz d | |||||
pa) d (szerű d | |||||
ná) d (suhog d | |||||
.group dz | .group dz | ||||
fogó) dz (kod ts | fogó) dz (kod ts | ||||
rángató) dz z | rángató) dz z | ||||
titkoló) dz z | titkoló) dz z | ||||
ringató) dz z | ringató) dz z | ||||
mére) dz (k ts | |||||
pilóta) dzs (ek dZ | |||||
.group e | .group e | ||||
e E | e E | ||||
@) ében (_S4q e:bEn | @) ében (_S4q e:bEn | ||||
@) ének (_S4q e:nEk | @) ének (_S4q e:nEk | ||||
@) étől (_S4q e:tY:l | @) étől (_S4q e:tY:l | ||||
@) ére (_S3q e:R2E | |||||
@) éig (_S3q e:ig | |||||
éhség e:Se:g | éhség e:Se:g | ||||
éhségg e:Se:g: | éhségg e:Se:g: | ||||
.group f | .group f | ||||
f f | f f | ||||
//führer fy:R2ER2 | //führer fy:R2ER2 | ||||
e) ff (ajt f | |||||
e) ff (él f | |||||
a) ff (él f | |||||
.group g | .group g | ||||
e) gy (enként J: | e) gy (enként J: | ||||
félmege) gy (ez J: | félmege) gy (ez J: | ||||
_e) gy (el J: | _e) gy (el J: | ||||
tizene) gy (et J: | |||||
tizene) gy (en J: | |||||
e) gy (esület J: | |||||
a) gy (sej J | |||||
e) gy (úttal J: | |||||
épülete) gy (ütt J: | |||||
.group h | .group h | ||||
h h | h h | ||||
.group i | .group i | ||||
i i | i i | ||||
@) i (_S1 i | @) i (_S1 i | ||||
@) ig (_S2 ig | |||||
_) itthon ithon | _) itthon ithon | ||||
.group í | .group í | ||||
v) í (zére i | v) í (zére i | ||||
sz) í (ve i | sz) í (ve i | ||||
t) í (zes i | t) í (zes i | ||||
sz) í (vel i: | |||||
.group j | .group j | ||||
j j | j j | ||||
@) jában (_S5q ja:bAn | @) jában (_S5q ja:bAn | ||||
@) jának (_S5q ja:nAk | @) jának (_S5q ja:nAk | ||||
@) jától (_S5q ja:to:l | @) jától (_S5q ja:to:l | ||||
@) jáig (_S4q ja:ig | |||||
@) jára (_S4q ja:R2A | |||||
@) jával (_S5q ja:vAl | |||||
@) jének (_S5 je:nEk | |||||
@) jére (_S4 je:R2E | |||||
@) jétől (_S5 je:tY:l | |||||
@) jéig (_S4 je:ig | |||||
@) jével (_S5 je:vEl | |||||
_) javíts jAvi:tS: | _) javíts jAvi:tS: | ||||
_) javítsd jAvi:tSd | _) javítsd jAvi:tSd | ||||
.group k | .group k | ||||
k k | k k | ||||
kk k: | kk k: | ||||
készségg ke:SSe:g: | készségg ke:SSe:g: | ||||
_a) kk (reditál k | _a) kk (reditál k | ||||
_) közt kYst | _) közt kYst | ||||
bara) kk (b k | |||||
bara) kk (f k | |||||
bara) kk (j k | |||||
.group l | .group l | ||||
l l | l l | ||||
irá) ny (jel n^ | irá) ny (jel n^ | ||||
ö) n (jelöl n | ö) n (jelöl n | ||||
teljesítmé) ny (javu n^ | teljesítmé) ny (javu n^ | ||||
törvé) ny (java n^ | |||||
ajá) nl l: | |||||
.group o | .group o | ||||
o o | o o | ||||
.group p | .group p | ||||
p p | p p | ||||
pp p: | pp p: | ||||
pp (C pp | |||||
pp (C p: | |||||
p (v p_ | p (v p_ | ||||
_) potsdam potsda:m | _) potsdam potsda:m | ||||
qu kv | qu kv | ||||
.group r | .group r | ||||
@) ra (_S2 R2A | |||||
@) re (_S2 RE | |||||
r R2 | r R2 | ||||
rr RR | |||||
rm R2_m | rm R2_m | ||||
r) r R2 | |||||
r (r R | |||||
r (cc R | r (cc R | ||||
_) richa (rd R2iCa: | _) richa (rd R2iCa: | ||||
i) rr (itá R2 | i) rr (itá R2 | ||||
ko) rr (epetá R2 | ko) rr (epetá R2 | ||||
.group s | .group s | ||||
s S | s S | ||||
föld) s (ánc S | föld) s (ánc S | ||||
hallá) s (zavar S | hallá) s (zavar S | ||||
gyalogo) s (zászló S | gyalogo) s (zászló S | ||||
ki) s (zsidó S | ki) s (zsidó S | ||||
szennye) s (zsá S | |||||
alvá) s (zavar S | |||||
.group ss | .group ss | ||||
ssz ss2 | ssz ss2 | ||||
jelzé) ssz (erű Ss | jelzé) ssz (erű Ss | ||||
kitöré) ssz (erű Ss | kitöré) ssz (erű Ss | ||||
hatá) ssz (üne Ss | hatá) ssz (üne Ss | ||||
fri) ss (zöl S: | |||||
nyúva) ssz s: | |||||
hirdeté) ssz (erve Ss | |||||
páncélo) ssz Ss | |||||
.group sz | .group sz | ||||
sz s | sz s | ||||
tava) sz (ára s | tava) sz (ára s | ||||
rongyo) szs (ák SZ | rongyo) szs (ák SZ | ||||
para) sztsz (ek st|s | para) sztsz (ek st|s | ||||
rava) sz (ára s | |||||
rava) sz (ár s | |||||
.group t | .group t | ||||
tt t: | tt t: | ||||
ttk t:k | ttk t:k | ||||
tth t:h | tth t:h | ||||
ttg t:g | |||||
ttgy t:J | |||||
ttp t:p | |||||
@) tól (_S3q to:l | @) tól (_S3q to:l | ||||
@) től (_S3q tY:l | @) től (_S3q tY:l | ||||
tt (C tt | |||||
tt (C t: | |||||
ttn t:n | ttn t:n | ||||
ttm t:m | ttm t:m | ||||
ttl t:l | ttl t:l | ||||
vizsgála) t (soroza t | vizsgála) t (soroza t | ||||
á) tjátsz tja:ts: | á) tjátsz tja:ts: | ||||
á) tjátssz tja:ts: | á) tjátssz tja:ts: | ||||
kobal) t (sugár t | |||||
többle) t (szol t | |||||
á) t (söprő t | |||||
ú) t (javí t | |||||
billentyűze) t (jel t | |||||
á) t (címké t | |||||
sej) t (szö t | |||||
szöve) t (sapk t | |||||
mene) t (szél t | |||||
tesz) t (cikk t | |||||
.group ts | .group ts | ||||
ts (_S2 tS //general rule with word end of ts letters | ts (_S2 tS //general rule with word end of ts letters | ||||
segi) ts (é tS: | segi) ts (é tS: | ||||
kür) tsz (ó t|s | kür) tsz (ó t|s | ||||
hi) tsz (ó t|s | hi) tsz (ó t|s | ||||
á) tsz (ok t|s | |||||
halla) tsz (a ts: | |||||
fejle) ts (ég tS: | |||||
sie) tsz ts: | |||||
.group u | .group u | ||||
u u | u u | ||||
lefeje) z (ték s | lefeje) z (ték s | ||||
pén) z (tár s | pén) z (tár s | ||||
ré) z (serpenyő z | ré) z (serpenyő z | ||||
tartó) z s | |||||
tartó) z (t s | |||||
gá) z (cső z | gá) z (cső z | ||||
foglalko) z (t s | foglalko) z (t s | ||||
tanulmányo) z (t s | tanulmányo) z (t s | ||||
magyará) z (t s | magyará) z (t s | ||||
kötö) z (t s | |||||
vitatko) z (t s | |||||
tartó) z (k s | |||||
ajándéko) z (t s | |||||
tarto) z (k s | |||||
tarto) z (t s | |||||
rejtő) z (kö s | |||||
rejtő) z (t s | |||||
hango) z (t s | |||||
.group | .group | ||||
_3f Tr#j'u: | _3f Tr#j'u: | ||||
_4f fj'W:Qyrr# | _4f fj'W:Qyrr# | ||||
_5 f'Im | _5 f'Im | ||||
_6 s'e:xs | |||||
_6 s'E:xs | |||||
_7 sj'W: | _7 sj'W: | ||||
_8 'aUhd& | |||||
_8 'aUhda | |||||
_9 n'i:;y | _9 n'i:;y | ||||
_10 t'i:;y | _10 t'i:;y | ||||
_11 'EdlEv,y | _11 'EdlEv,y | ||||
_5X f'Imti;,y | _5X f'Imti;,y | ||||
_6X s'Exsdi;,y | _6X s'Exsdi;,y | ||||
_7X sj'W:ti;,y | _7X sj'W:ti;,y | ||||
_8X 'aUhd&t,i;y | |||||
_8X 'aUhdat,i;y | |||||
_9X n'i:;yt,i;y | _9X n'i:;yt,i;y | ||||
_0C h'ynd@-*yD | _0C h'ynd@-*yD | ||||
_1C 'eIhd||h'ynd@-R&D | |||||
_1C 'eIhd||h'ynd@-RaD | |||||
_2C tv'W:||h'ynd@-RyD | _2C tv'W:||h'ynd@-RyD | ||||
_3C Tr#j'u:||h'ynd@-RyD | _3C Tr#j'u:||h'ynd@-RyD | ||||
_4C fj'W:Qyrr#||h'ynd@-RyD | _4C fj'W:Qyrr#||h'ynd@-RyD | ||||
_1M2 eI:n||m'IdljoUn | _1M2 eI:n||m'IdljoUn | ||||
_2M2 tv'aI:rr#||m'IdljoUn | _2M2 tv'aI:rr#||m'IdljoUn | ||||
_3M2 Tr#j'aU:rr#||m'IdljoUn | _3M2 Tr#j'aU:rr#||m'IdljoUn | ||||
_4M2 fj'oU:*&rr#||m'IdljoUn | |||||
_dpt _k,Omm&_ | |||||
_0and o:Q | |||||
_4M2 fj'oU:*arr#||m'IdljoUn | |||||
_dpt _k,Omma_ | |||||
_0and O:Q | |||||
_cap sd'oUrr#d | _cap sd'oUrr#d | ||||
_?? t'aUghn# | _?? t'aUghn# | ||||
// Characters | // Characters | ||||
_! 'yhbr#oUpyn&Rm,Err#kI | |||||
_" JaI:s&lWhb | |||||
# mIll& | |||||
_$ d'Odl&rr# | |||||
_& o:QmErr#kI | |||||
_! 'yhbr#oUpynaRm,Err#kI | |||||
_" JaI:salWhb | |||||
# mIlla | |||||
_$ d'Odlarr# | |||||
_& O:QmErr#kI | |||||
/ skaUsdr#Ig | / skaUsdr#Ig | ||||
_( svI:jI | _( svI:jI | ||||
_) sv'I:jIl'o:k&sd | |||||
_) sv'I:jIl'O:kasd | |||||
_{ slYy:vysvIjI | _{ slYy:vysvIjI | ||||
_} sl'Yy:vysv,IjIl'o:k&sd | |||||
_} sl'Yy:vysv,IjIl'O:kasd | |||||
_[ hOrdn#glOvI | _[ hOrdn#glOvI | ||||
_] h'Ordn#glOvIl'o:k&sd | |||||
= s'a:m&sEmm,Err#kI | |||||
_] h'Ordn#glOvIl'O:kasd | |||||
= s'a:masEmm,Err#kI | |||||
_\ 'W:vyxdsk,aUsdr#Ig | _\ 'W:vyxdsk,aUsdr#Ig | ||||
_- b&ndsdrr#Ig | |||||
_- bandsdrr#Ig | |||||
__ yndIRsdrr#Ig | __ yndIRsdrr#Ig | ||||
_? sb'yrdn#iNg,&mErr#kI | |||||
_? sb'yrdn#iNg,amErr#kI | |||||
+ bl'u:s | + bl'u:s | ||||
_< OdglOvI | _< OdglOvI | ||||
_> 'OdglOvIl,o:k&sd | |||||
_. p'uN#hgdy#rr# | |||||
_, k'Omm& | |||||
_; s'e:mik,Omm& | |||||
_: dv'i:puN#hgdy#rr# | |||||
_> 'OdglOvIl,O:kasd | |||||
_. p'uN#hgdyrr# | |||||
_, k'Omma | |||||
_; s'E:mik,Omma | |||||
_: dv'i:puN#hgdyrr# | |||||
// abbreviations | // abbreviations | ||||
//**************** | //**************** | ||||
_á aU: | _á aU: | ||||
á aU: $atend | á aU: $atend | ||||
b bje: | |||||
c sje: | |||||
d dje: | |||||
ð e:D | |||||
b bjE: | |||||
c sjE: | |||||
d djE: | |||||
ð E:D | |||||
f Ef | f Ef | ||||
g gje: | |||||
g gjE: | |||||
h haU: | h haU: | ||||
_í i: | _í i: | ||||
í i: $atend | í i: $atend | ||||
j j'o:D | |||||
j j'O:D | |||||
k k'aU: | k k'aU: | ||||
l Etl# | l Etl# | ||||
m Em | m Em | ||||
n En | n En | ||||
p pje: | |||||
p pjE: | |||||
q ku: | q ku: | ||||
r Err# | r Err# | ||||
s Es | s Es | ||||
t tje: | |||||
t tjE: | |||||
v vaf | v vaf | ||||
w tv'W:v&ldv,af | |||||
x e:xs | |||||
w tv'W:valdv,af | |||||
x E:xs | |||||
_y 'yfsilOn||,I: | _y 'yfsilOn||,I: | ||||
_ý 'yfsilOn||,i: | _ý 'yfsilOn||,i: | ||||
y 'yfsilOn||,I: $atend | y 'yfsilOn||,I: $atend | ||||
ý 'yfsilOn||,i: $atend | ý 'yfsilOn||,i: $atend | ||||
z se:t& | |||||
z sE:ta | |||||
þ T'Ordn# | þ T'Ordn# | ||||
// MAIN WORD DICTIONARY | // MAIN WORD DICTIONARY | ||||
//********************* | //********************* | ||||
bolla bOll& | |||||
halló h&lloU | |||||
mylla mIll& | |||||
bolla bOlla | |||||
halló halloU | |||||
mylla mIlla |
// letter group F p,t,k,s | // letter group F p,t,k,s | ||||
// letter group H j,r,v, | // letter group H j,r,v, | ||||
.L01 e i í y ý æ j // front vowels | |||||
.L02 c f h k p t x þ s // voiceless consonants | |||||
.L03 p t k | |||||
.replace | .replace | ||||
x xz // so that it behaves as 2 letters | x xz // so that it behaves as 2 letters | ||||
.group a | .group a | ||||
a a: | a a: | ||||
a (FH a: | a (FH a: | ||||
a (CC & | |||||
a (CC a | |||||
a (ng aU | a (ng aU | ||||
a (nk aU | a (nk aU | ||||
au (CC Yy | au (CC Yy | ||||
_) al (@P2N ,a:l | _) al (@P2N ,a:l | ||||
_) a (ll+ & | |||||
_) a (ll+ a | |||||
.group á | .group á | ||||
á aU: | á aU: | ||||
.group ð | .group ð | ||||
ð D | ð D | ||||
ð (B T | ð (B T | ||||
ð (__ T // before pause | |||||
ð (__ T | |||||
.group e | .group e | ||||
e e: | |||||
e (FH e: | |||||
e E: | |||||
e (FH E: | |||||
e (CC E | e (CC E | ||||
e (ng eI | e (ng eI | ||||
e (nk eI | e (nk eI | ||||
_) g (i J | _) g (i J | ||||
_) g (í J | _) g (í J | ||||
_) g (æ J | _) g (æ J | ||||
_) g (j J | |||||
_) gj J | |||||
A) g (a Q | A) g (a Q | ||||
A) g (u Q | A) g (u Q | ||||
A) g (ð Q | A) g (ð Q | ||||
A) g (r Q | A) g (r Q | ||||
g (_ Q | |||||
gn (_ g | |||||
g (_ x | |||||
gn (_ gn# | |||||
gt xd | gt xd | ||||
g (s x | g (s x | ||||
gj J | gj J | ||||
h h | h h | ||||
hj C | hj C | ||||
hl l# | hl l# | ||||
hr hr# | |||||
hn hn# | hn hn# | ||||
hv kv | hv kv | ||||
.group k | .group k | ||||
k k | |||||
_) k (e c | |||||
_) k (i c | |||||
_) k (í c | |||||
_) k (y c | |||||
_) k (ý c | |||||
_) k (æ c | |||||
_) k k | |||||
k g | |||||
_) k (L01 c | |||||
k (L01 J | |||||
kj c | kj c | ||||
k (K g | k (K g | ||||
k (k h // [hk] | k (k h // [hk] | ||||
k (s x | |||||
k (t t | |||||
.group l | .group l | ||||
l l | l l | ||||
l (_ l# | |||||
l (_ l# // ?? | |||||
l (BX l# | l (BX l# | ||||
ll dl | ll dl | ||||
ll (BX tl# | ll (BX tl# | ||||
m m | m m | ||||
mm (K m | mm (K m | ||||
B) m hm# | B) m hm# | ||||
m (B m# | |||||
m (L03 m# | |||||
.group n | .group n | ||||
n n | n n | ||||
nn n: | |||||
B) n hn# | B) n hn# | ||||
n (B n# | |||||
n (L03 n# | |||||
n (g N | n (g N | ||||
ng (_ Ng | ng (_ Ng | ||||
ngt (K N#d | ngt (K N#d | ||||
.group o | .group o | ||||
o o: | |||||
o (FH o: | |||||
o O: | |||||
o (FH O: | |||||
o (CC O | o (CC O | ||||
o (gi OI | |||||
o (gj OI | |||||
o (ng oU | o (ng oU | ||||
o (nk oU | o (nk oU | ||||
ó oU: | ó oU: | ||||
ó (FH oU: | ó (FH oU: | ||||
ó (CC oU | ó (CC oU | ||||
óf (A oU2 | |||||
.group p | .group p | ||||
p b | |||||
_) p p | _) p p | ||||
p p | |||||
B) p b | |||||
s) p b | |||||
p (K b | |||||
p (s f | p (s f | ||||
p (k f | p (k f | ||||
p (t f | p (t f | ||||
C) r @-R | C) r @-R | ||||
l) r **R | l) r **R | ||||
A) r (A *R | A) r (A *R | ||||
B) r r# | |||||
r (B rr# | |||||
r (L02 rr# | |||||
r (_ _|R | r (_ _|R | ||||
r _|R2 | r _|R2 | ||||
rr R*R | rr R*R | ||||
rl dl | rl dl | ||||
rl (K rtl# | |||||
rn rdn# | |||||
rl (B Rtl# | |||||
rn Rdn# | |||||
.group s | .group s | ||||
s s | s s | ||||
ss ss2 | ss ss2 | ||||
_) sh S // English | |||||
sh (_ S // English | |||||
.group t | .group t | ||||
_) t t | _) t t | ||||
t t | |||||
B) t d | |||||
s) t d | |||||
t (K d | |||||
t d | |||||
tt hd | tt hd | ||||
t (l ht //?? ætla | |||||
t (l hd //?? ætla | |||||
t (n hd | |||||
th (_ T // English | |||||
_) th T // English | |||||
.group u | .group u | ||||
u y: | u y: | ||||
u (FH y: | u (FH y: | ||||
u (CC y | u (CC y | ||||
u (gi yI | |||||
u (gj yI | |||||
K) u (ng u | K) u (ng u | ||||
K) u (nk u | K) u (nk u | ||||
@) u (num_ O | |||||
.group ú | .group ú |
jouw $u | jouw $u | ||||
uw $u | uw $u | ||||
zijn $u | zijn $u | ||||
z'n $u | |||||
z'n z@n | |||||
haar $u | haar $u | ||||
d'r $u | |||||
d'r d@r | |||||
ons $u | ons $u | ||||
onze $u | onze $u | ||||
jullie $u | jullie $u |
au VU | au VU | ||||
ay a:j | ay a:j | ||||
_) aan (@P3 'a:n | |||||
.group b | .group b | ||||
_) b (_ be: | _) b (_ be: | ||||
_) n (_ En | _) n (_ En | ||||
n n | n n | ||||
nn n | nn n | ||||
ng (_ N | |||||
ng N | |||||
nj n^ | nj n^ | ||||
A) r (_A * | A) r (_A * | ||||
rr x | rr x | ||||
XC) r (A R | XC) r (A R | ||||
C) r (A r | |||||
C) r (A * | |||||
//?1 C) r (A r | //?1 C) r (A r | ||||
_) r x | _) r x | ||||
l) r x | l) r x |
பாகவதம் $alt | பாகவதம் $alt | ||||
பகவத் $alt | பகவத் $alt | ||||
பங்கம் $alt | பங்கம் $alt | ||||
பீதி $alt | |||||
பேகம் $alt | பேகம் $alt | ||||
பார்லி $alt | பார்லி $alt | ||||
பிக்கினி $alt | பிக்கினி $alt | ||||
பாக்கித் $alt | பாக்கித் $alt | ||||
பாக்கிச் $alt | பாக்கிச் $alt | ||||
பர்மிய $alt | பர்மிய $alt | ||||
பலே $alt | |||||
பூம் $alt | |||||
பரத $alt | |||||
(பி . ஏ) bije: | (பி . ஏ) bije: | ||||
துருவம் $alt | துருவம் $alt | ||||
தீரமுள்ள $alt | தீரமுள்ள $alt | ||||
தீரமற்ற $alt | தீரமற்ற $alt | ||||
தலாய் $alt | |||||
தேசிங்கு $alt | |||||
தேச $alt | |||||
தேசப் $alt | |||||
தானம் $alt | |||||
// initial ட | // initial ட | ||||
டார்ச் t.a:rtS | டார்ச் t.a:rtS | ||||
டிவி t.ivi | டிவி t.ivi | ||||
டி t.i | |||||
// initial ச as [tS] | // initial ச as [tS] | ||||
சீ $alt | சீ $alt | ||||
சீச்சீ $alt | சீச்சீ $alt | ||||
சிட்டாய் $alt | சிட்டாய் $alt | ||||
சேச்சே $alt | சேச்சே $alt | ||||
சிரம் sirVm | |||||
கக $alt // initial க as [g] | கக $alt // initial க as [g] | ||||
கோபி $alt | கோபி $alt | ||||
கச்சாமி $alt | கச்சாமி $alt | ||||
குரு $alt | குரு $alt | ||||
கோர $alt | |||||
கும் $alt | கும் $alt | ||||
கும்மென்று $alt | கும்மென்று $alt | ||||
கும்முனு $alt | கும்முனு $alt | ||||
கம்னு $alt | கம்னு $alt | ||||
கம்மென்று $alt | கம்மென்று $alt | ||||
குதி $alt | குதி $alt | ||||
கம் $alt | |||||
காந்தம் $alt | |||||
// p as [f] | // p as [f] | ||||
டிபன் t.ifVn | டிபன் t.ifVn | ||||
ஆகா a:Ha: | ஆகா a:Ha: | ||||
ஓகோ o:Ho: | ஓகோ o:Ho: | ||||
கப் kVp | |||||
_) க (B k | _) க (B k | ||||
_) க (T gV // if word has $alt attribute in ta_list | _) க (T gV // if word has $alt attribute in ta_list | ||||
_) க (BT+ g // $alt | _) க (BT+ g // $alt | ||||
க்க kkV | |||||
க்க (B kk | |||||
க் (க k | |||||
க்) க kV# | |||||
ற்) க _kV | ற்) க _kV | ||||
ற்) க (B _k | ற்) க (B _k | ||||
L01) க kV | L01) க kV | ||||
//sort | //sort | ||||
_) க (ங்கா gV | _) க (ங்கா gV | ||||
_) க (ங்கை gV | _) க (ங்கை gV | ||||
_) க (டகட gV | |||||
_) க (டப்பாரை gV | _) க (டப்பாரை gV | ||||
_) க (டிகார gV | _) க (டிகார gV | ||||
_) க (டோத்கஜ gV | _) க (டோத்கஜ gV | ||||
_) க (ணீர gV | _) க (ணீர gV | ||||
_) க (ணே gV | _) க (ணே gV | ||||
_) க (ண்டங் gV | _) க (ண்டங் gV | ||||
_) க (தாயுத gV | |||||
_) க (திகலங் gV | _) க (திகலங் gV | ||||
_) க (திக் gV | |||||
_) க (திதா gV | _) க (திதா gV | ||||
_) க (திய gV | _) க (திய gV | ||||
_) க (தியில் gV | _) க (தியில் gV | ||||
_) க (லீர gV | _) க (லீர gV | ||||
_) க (வண gV | _) க (வண gV | ||||
_) க (வன gV | _) க (வன gV | ||||
_) க (வர்னர gV | |||||
_) க (வாஸ்கர gV | _) க (வாஸ்கர gV | ||||
_) க (ாண்டாமிருக g | _) க (ாண்டாமிருக g | ||||
_) க (ாண்டீப g | _) க (ாண்டீப g | ||||
_) காண்டேக (ர ga:n.d.e:kV | _) காண்டேக (ர ga:n.d.e:kV | ||||
_) க (ாந்த g | |||||
_) க (ாந்தங் g | |||||
_) க (ாந்தத் g | |||||
_) க (ாந்தி g | |||||
_) க (ானங் g | _) க (ானங் g | ||||
_) க (ானத்த g | _) க (ானத்த g | ||||
_) க (ானம g | _) க (ானம g | ||||
_) க (ிரிஜா g | _) க (ிரிஜா g | ||||
_) க (ிரிதர g | _) க (ிரிதர g | ||||
_) க (ீதல k | _) க (ீதல k | ||||
_) க (ீத்த k | |||||
_) க (ுகன g | _) க (ுகன g | ||||
_) க (ுகை g | _) க (ுகை g | ||||
_) க (ுஜராத g | _) க (ுஜராத g | ||||
_) குண்டாந்த (டி gun.d.a:ntV | _) குண்டாந்த (டி gun.d.a:ntV | ||||
_) க (ுண்டாய g | _) க (ுண்டாய g | ||||
_) க (ுண்டு g | _) க (ுண்டு g | ||||
_) க (ுதிக் g | |||||
_) க (ுதிச் g | _) க (ுதிச் g | ||||
_) க (ுதித் g | _) க (ுதித் g | ||||
_) க (ுதிப் g | _) க (ுதிப் g | ||||
_) க (ுபுகுபு g | _) க (ுபுகுபு g | ||||
_) க (ுபுக் g | _) க (ுபுக் g | ||||
_) க (ுப்பென்ற g | _) க (ுப்பென்ற g | ||||
_) க (ுமாஸ்தா g | |||||
_) க (ுமுகுமு g | _) க (ுமுகுமு g | ||||
_) க (ும்பல g | _) க (ும்பல g | ||||
_) க (ும்மிடிப்பூண் g | _) க (ும்மிடிப்பூண் g | ||||
_) க (ுருக்கள g | _) க (ுருக்கள g | ||||
_) க (ுருதேவ g | _) க (ுருதேவ g | ||||
_) க (ுருநா g | _) க (ுருநா g | ||||
_) க (ுருமார g | |||||
_) க (ுருரா g | _) க (ுருரா g | ||||
_) க (ுருவா g | _) க (ுருவா g | ||||
_) க (ுருவாய g | _) க (ுருவாய g | ||||
_) க (ுருவுடை g | _) க (ுருவுடை g | ||||
_) க (ுருவோட g | _) க (ுருவோட g | ||||
_) க (ூடலூர g | _) க (ூடலூர g | ||||
_) க (ூர்க்கா g | |||||
_) க (ெட்டி g | _) க (ெட்டி g | ||||
_) க (ெட்டிரு k | |||||
_) க (ேலி g | _) க (ேலி g | ||||
_) க (ோகுல g | _) க (ோகுல g | ||||
_) க (ோதாவரி g | _) க (ோதாவரி g | ||||
_) க (ோந்து g | _) க (ோந்து g | ||||
_) க (ோபப் k | _) க (ோபப் k | ||||
கோப (ால go:p | கோப (ால go:p | ||||
_) க (ோபிகை g | |||||
_) க (ோபிசெட் g | _) க (ோபிசெட் g | ||||
_) கோப (ித்து ko:b | _) கோப (ித்து ko:b | ||||
_) க (ோபிநா g | _) க (ோபிநா g | ||||
_) க (ோபிய g | _) க (ோபிய g | ||||
_) க (ோபுர g | _) க (ோபுர g | ||||
_) க (ோர_ g | |||||
_) க (ோர_முடிய k | |||||
_) க (ோர_வேண்ட k | |||||
_) க (ோரக g | _) க (ோரக g | ||||
_) க (ோரத g | _) க (ோரத g | ||||
_) க (ோரப g | _) க (ோரப g | ||||
//sort | //sort | ||||
_கல்) க (ண்ட kV | _கல்) க (ண்ட kV | ||||
_நற்) க (தி gV | |||||
_கல்) க (த்தா kV | _கல்) க (த்தா kV | ||||
கொல்) க (த்தா kV | கொல்) க (த்தா kV | ||||
மோ) க (ன HV | மோ) க (ன HV | ||||
சுதா) க (ரின kV | சுதா) க (ரின kV | ||||
சுதா) க (ர்_ kV | சுதா) க (ர்_ kV | ||||
கல) க (ல kV | கல) க (ல kV | ||||
க (வி kV | |||||
வீண்) க (வலை kV | |||||
மகா) க (வி kV | |||||
மஹா) க (வி kV | |||||
விகட) க (வி kV | |||||
க (விஞ kV | |||||
க (விராய kV | |||||
வீண்) க (ஷ்ட kV | |||||
ம) க (ா H | ம) க (ா H | ||||
தொல்) க (ாப்பி k | தொல்) க (ாப்பி k | ||||
கோயில்) க (ாளை k | கோயில்) க (ாளை k | ||||
கி (ரண g | கி (ரண g | ||||
_) கி (ரஹ g | _) கி (ரஹ g | ||||
_) கி (ராக்கி g | _) கி (ராக்கி g | ||||
_) கி (ராதக k | |||||
_) கி (ராம g | _) கி (ராம g | ||||
_) கி (ரீட k | _) கி (ரீட k | ||||
ங்) க (ிரு g | ங்) க (ிரு g | ||||
கிரு (ஷ் kri | கிரு (ஷ் kri | ||||
_) கி (ரைண்டர g | |||||
கி (லேச k | |||||
_வட) க (ிழ k | |||||
தென்) க (ிழ k | |||||
நற்) க (ுண g | நற்) க (ுண g | ||||
_சற்) க (ுண g | |||||
க (ுமார k | க (ுமார k | ||||
_) கு (ரோத k | _) கு (ரோத k | ||||
க (ுல k | க (ுல k | ||||
_அங்) க (ுல g | |||||
_) குல்க (ந்த gulkV | _) குல்க (ந்த gulkV | ||||
குண்டல) க (ேசி k | |||||
ம) க (ேசுவர H // need to restrict to _ம) and _வீரம) ?? | ம) க (ேசுவர H // need to restrict to _ம) and _வீரம) ?? | ||||
ம) க (ேந்திர H | ம) க (ேந்திர H | ||||
ம) க (ேஷ்வ H | ம) க (ேஷ்வ H | ||||
ம) க (ேஸ்வர H | ம) க (ேஸ்வர H | ||||
வீண்) க (ோப k | |||||
துர்) க்க ggV# | துர்) க்க ggV# | ||||
மார்) க்க ggV# | மார்) க்க ggV# | ||||
மூர்) க்க ggV# | |||||
_வர்) க்க ggV# | _வர்) க்க ggV# | ||||
_சொர்) க்க ggV# | _சொர்) க்க ggV# | ||||
நிர்) க்க (தி ggV | |||||
அ) க்க (ினி gg | |||||
வி) க்ட (ோரியா kt. // victoria | வி) க்ட (ோரியா kt. // victoria | ||||
வி) க (்ரம k | |||||
//endsort | //endsort | ||||
_) சி (நே s | _) சி (நே s | ||||
_) சி (னே s | _) சி (னே s | ||||
_) ச (ின் tS | _) ச (ின் tS | ||||
_) சிரத்த (ை srVdd | |||||
சி (ரம s | சி (ரம s | ||||
_) சிரு (ஷ்டி sri | _) சிரு (ஷ்டி sri | ||||
_) ச (ீன tS | _) ச (ீன tS | ||||
_) ச (ீனிவா s | _) ச (ீனிவா s | ||||
சீ (னிவாச sri: | சீ (னிவாச sri: | ||||
_) ச (ீன்_ s | |||||
_ஈ) சு s | _ஈ) சு s | ||||
கே) சு (வ s | கே) சு (வ s | ||||
மே) சு (வ s | மே) சு (வ s | ||||
_) ட (ிவிய t. | _) ட (ிவிய t. | ||||
_) ட (வல t.V | _) ட (வல t.V | ||||
_) ட (வர t.V | _) ட (வர t.V | ||||
_) ட (ேப t. | |||||
.group ண | .group ண | ||||
ண n.V | ண n.V | ||||
_) த (சரதர dV | _) த (சரதர dV | ||||
_) த (சரா dV | _) த (சரா dV | ||||
_) த (சை dV | _) த (சை dV | ||||
_) த (டதட dV | |||||
_) த (டபுடல dV | _) த (டபுடல dV | ||||
_) த (டவை dV | _) த (டவை dV | ||||
_) த (டால dV | _) த (டால dV | ||||
_) த (டிJ_பயல dV | _) த (டிJ_பயல dV | ||||
_) த (டிJ_புத்தக dV | _) த (டிJ_புத்தக dV | ||||
_) த (டிJ_மாட dV | _) த (டிJ_மாட dV | ||||
_) த (டிக்க dV | |||||
_) த (டித்த dV | _) த (டித்த dV | ||||
_) த (டியன dV | _) த (டியன dV | ||||
_) த (டியர dV | _) த (டியர dV | ||||
_) த (ண்டபாணி dV | _) த (ண்டபாணி dV | ||||
_) த (ண்டம dV | _) த (ண்டம dV | ||||
_) த (ண்டாயுதபாணி dV | _) த (ண்டாயுதபாணி dV | ||||
_) த (ண்டிக்க dV | |||||
_) த (ண்டித் dV | _) த (ண்டித் dV | ||||
_) த (ண்டிப்ப dV | |||||
_) த (ண்டிப்பா dV | |||||
_) த (ண்டியுங்கள dV | |||||
_) த (னகோடி dV | _) த (னகோடி dV | ||||
_) த (னசேகரன dV | _) த (னசேகரன dV | ||||
_) த (னன்ஜெயன dV | _) த (னன்ஜெயன dV | ||||
_) த (வம dV | _) த (வம dV | ||||
_) த (ாக்கா d | _) த (ாக்கா d | ||||
_) த (ாக்காம t | _) த (ாக்காம t | ||||
_) த (ாக்காவிட்டா t | |||||
_) த (ாச d | _) த (ாச d | ||||
_) த (ாடி d | _) த (ாடி d | ||||
_) த (ாட்சண்ய d | |||||
_) த (ாட்சாய d | _) த (ாட்சாய d | ||||
_) த (ாதா d | _) த (ாதா d | ||||
_) த (ானங் d | |||||
_) த (ானத் d | |||||
_) த (ானிய d | _) த (ானிய d | ||||
_) த (ானுவ d | _) த (ானுவ d | ||||
_) த (ாம்_தூம d | _) த (ாம்_தூம d | ||||
_) த (ிக்கு d | _) த (ிக்கு d | ||||
_) த (ிக்கு_முக்க t | _) த (ிக்கு_முக்க t | ||||
_) த (ிக்கு_வாய t | _) த (ிக்கு_வாய t | ||||
_) த (ிக்குமுக்கா t | |||||
_) த (ிக்கே d | _) த (ிக்கே d | ||||
_) த (ிக்கை d | _) த (ிக்கை d | ||||
_) த (ிக்விஜய d | |||||
_) த (ிசை d | _) த (ிசை d | ||||
_) த (ிடப d | _) த (ிடப d | ||||
_) த (ிடம d | _) த (ிடம d | ||||
_) த (ிவாகர d | _) த (ிவாகர d | ||||
_) த (ிவான d | _) த (ிவான d | ||||
_) த (ிவ்ய d | _) த (ிவ்ய d | ||||
_) த (ீட்சை d | |||||
_) த (ீப d | _) த (ீப d | ||||
_) த (ீப்ப t | _) த (ீப்ப t | ||||
_) த (ீரச் d | _) த (ீரச் d | ||||
_) த (ீரத்துட d | |||||
_) த (ீரன d | _) த (ீரன d | ||||
_) த (ீரமில்ல d | _) த (ீரமில்ல d | ||||
_) த (ீரரை d | |||||
_) த (ீரர் d | _) த (ீரர் d | ||||
_) த (ீர்க d | _) த (ீர்க d | ||||
_) த (ீர்க்கலா t | |||||
_) த (ீர்க்கா t | |||||
_) த (ீர்க்க t | |||||
_) த (ுக்க d | _) த (ுக்க d | ||||
_) த (ுக்கடா t | |||||
_) த (ுக்கிரி t | |||||
_) த (ுச்சம d | _) த (ுச்சம d | ||||
_) த (ுச்சாதனன d | _) த (ுச்சாதனன d | ||||
_) த (ுட்ட d | _) த (ுட்ட d | ||||
_) த (ுரோண d | _) த (ுரோண d | ||||
_) த (ுர் d | _) த (ுர் d | ||||
_) து (வந்த_ d | _) து (வந்த_ d | ||||
_) து (வார d | |||||
_) த (ுஷ் d | _) த (ுஷ் d | ||||
_) த (ூசி d | _) த (ூசி d | ||||
_) த (ூப d | _) த (ூப d | ||||
_) த (ூம d | _) த (ூம d | ||||
_) த (ூர d | _) த (ூர d | ||||
_) த (ூஷணை d | |||||
_) த (ெய்வ d | _) த (ெய்வ d | ||||
_) த (ேக d | _) த (ேக d | ||||
_) த (ேக்க t | _) த (ேக்க t | ||||
_) த (ேசத்தார d | |||||
_) த (ேவகான d | |||||
_) த (ேவகி d | _) த (ேவகி d | ||||
_) த (ேவதை d | _) த (ேவதை d | ||||
_) த (ேவன d | _) த (ேவன d | ||||
_) த (ேவருலக d | |||||
_) த (ேவர்க d | _) த (ேவர்க d | ||||
_) த (ேவலோக d | _) த (ேவலோக d | ||||
_) த (ேவாதி d | _) த (ேவாதி d | ||||
_) த (ேவி d | _) த (ேவி d | ||||
_) த (ேவேந் d | _) த (ேவேந் d | ||||
_) த (ைரிய d | _) த (ைரிய d | ||||
_) த (ொனி d | |||||
_) த (ொபுக் d | _) த (ொபுக் d | ||||
_) த (ொம் d | _) த (ொம் d | ||||
_) த (ோசை d | _) த (ோசை d | ||||
//endsort | //endsort | ||||
//sort | //sort | ||||
_வசந்) த tV# | _வசந்) த tV# | ||||
த (ன tV | த (ன tV | ||||
_கீ) த (ா t | _கீ) த (ா t | ||||
_சீ) த (ா t | |||||
_ல) த (ா t | _ல) த (ா t | ||||
அனி) த (ா t | அனி) த (ா t | ||||
சுஜா) த (ா t | சுஜா) த (ா t | ||||
_) து (ரோண t | _) து (ரோண t | ||||
_) து (வேச d | _) து (வேச d | ||||
_) து (வேஷ d | _) து (வேஷ d | ||||
_) துவைத dvaItV# | |||||
வீண்) த (ேவை t | |||||
வீண்) த (ொல்லை t | |||||
யு) த்த ddV# | யு) த்த ddV# | ||||
பு) த்த (ன ddV | பு) த்த (ன ddV | ||||
சி) த்த (ர ddV | |||||
பு) த்த (ர ddV | பு) த்த (ர ddV | ||||
பு) த்த (ி dd | பு) த்த (ி dd | ||||
சா) த்த (ிய dd | சா) த்த (ிய dd | ||||
பு) த்த (ியி dd | பு) த்த (ியி dd | ||||
உ) த்த (ியோக dd | உ) த்த (ியோக dd | ||||
சமு) த்த (ிர dd | சமு) த்த (ிர dd | ||||
அ) த்த (ெய்வ dd | |||||
ச) த (்ய t | ச) த (்ய t | ||||
நி) த (்ய t | நி) த (்ய t | ||||
ச) த்ரபதி trVpVti | |||||
சி) த (்ரா t | சி) த (்ரா t | ||||
பவி) த (்ரா t | பவி) த (்ரா t | ||||
ச) த (்ரு t | ச) த (்ரு t | ||||
_) ப (T+ bV // if word has $alt attribute in ta_list | _) ப (T+ bV // if word has $alt attribute in ta_list | ||||
_) ப (BT+ b // if word has $alt | _) ப (BT+ b // if word has $alt | ||||
ப் (ப p | ப் (ப p | ||||
ப pV | |||||
ப (B p | |||||
ப்) ப pV | |||||
ப்) ப (B p | |||||
L02) ப pV | L02) ப pV | ||||
L02) ப (B p | L02) ப (B p | ||||
குஷ்) ப (ு b | குஷ்) ப (ு b | ||||
று) ப _pV | |||||
று) ப(B _p | |||||
ம) ப pV | ம) ப pV | ||||
ம) ப (ா p | ம) ப (ா p | ||||
த) ப (ா p | த) ப (ா p | ||||
த) ப (B b | த) ப (B b | ||||
@) பத (ி pVt | |||||
ன்) பத (ி bVd | |||||
ப (ுர p | ப (ுர p | ||||
ப (ால p | ப (ால p | ||||
ப (ாள p | ப (ாள p | ||||
_) ப (ட்டன bV | _) ப (ட்டன bV | ||||
_) ப (ட்டன_ pV | _) ப (ட்டன_ pV | ||||
_) ப (தில bV | _) ப (தில bV | ||||
_) பத்த (ிரகாளி bVdd | |||||
_) ப (த்திரமா bV | _) ப (த்திரமா bV | ||||
_) ப (ந்தங்கள bV | _) ப (ந்தங்கள bV | ||||
_) ப (ந்தத் bV | _) ப (ந்தத் bV | ||||
_) ப (லதேவ bV | _) ப (லதேவ bV | ||||
_) ப (லத்தை bV | _) ப (லத்தை bV | ||||
_) ப (லப்படு bV | _) ப (லப்படு bV | ||||
_) ப (லப்பரீட்சை bV | |||||
_) ப (லம bV | _) ப (லம bV | ||||
_) ப (லமுறை pV | _) ப (லமுறை pV | ||||
_) ப (லராம bV | _) ப (லராம bV | ||||
_) ப (லவீன bV | _) ப (லவீன bV | ||||
_) ப (லஹீன bV | _) ப (லஹீன bV | ||||
_) பலாத்க (ார bVla:dk | _) பலாத்க (ார bVla:dk | ||||
_) ப (லிபீட bV | |||||
_) ப (லிய bV | _) ப (லிய bV | ||||
_) ப (லூன bV | _) ப (லூன bV | ||||
_) ப (வாணி bV | |||||
_) ப (வ்ய bV | _) ப (வ்ய bV | ||||
_) ப (ஸ bV | _) ப (ஸ bV | ||||
_) ப (ாகங்க b | _) ப (ாகங்க b | ||||
_) ப (ாடி_பில்டிங் b | _) ப (ாடி_பில்டிங் b | ||||
_) ப (ாணி b | _) ப (ாணி b | ||||
_) ப (ாதிக்க b | _) ப (ாதிக்க b | ||||
_) ப (ாதிக்கு_ p | |||||
_) ப (ாதிக்கும்_குறை p | |||||
_) ப (ாதிக்கும்_மேற்பட்ட_ p | |||||
_) ப (ாதிக்கும்_மேல p | |||||
_) ப (ாதித்த b | |||||
_) ப (ாதிப்ப b | _) ப (ாதிப்ப b | ||||
_) ப (ாதுஷா b | _) ப (ாதுஷா b | ||||
_) பாத்த (ியதை ba:dd | |||||
_) பாத்த (ியம்_ ba:dd | |||||
_) ப (ாத்யதை b | _) ப (ாத்யதை b | ||||
_) ப (ாத்ரூம b | _) ப (ாத்ரூம b | ||||
_) ப (ானு b | _) ப (ானு b | ||||
_) ப (ாலக்காட p | _) ப (ாலக்காட p | ||||
_) ப (ாலச b | _) ப (ாலச b | ||||
_) ப (ாலதண் b | _) ப (ாலதண் b | ||||
_) ப (ாலமு b | |||||
_) ப (ாலமுர b | |||||
_) ப (ாலாஜி b | _) ப (ாலாஜி b | ||||
_) ப (ாலாபிஷேக p | _) ப (ாலாபிஷேக p | ||||
_) ப (ாலாம்பிக b | |||||
_) ப (ாலாவ b | _) ப (ாலாவ b | ||||
_) ப (ாலின் p | _) ப (ாலின் p | ||||
_) ப (ாலு b | _) ப (ாலு b | ||||
_) ப (ால் p | _) ப (ால் p | ||||
_) ப (ால்_தாக்கரே b | _) ப (ால்_தாக்கரே b | ||||
_) ப (ால்ய b | _) ப (ால்ய b | ||||
_நேய_) ப (ாவ b | |||||
_சிநேக_) ப (ாவ b | |||||
_சினேக_) ப (ாவ b | |||||
_முக_) ப (ாவ b | |||||
_முகத்தின்_) ப (ாவ b | |||||
முகங்களினுடைய_) ப (ாவ b | |||||
முகங்களின்_) ப (ாவ b | |||||
முகங்களிலிருந்த_) ப (ாவ b | |||||
முகங்களிலிருந்து_) ப (ாவ b | |||||
முகத்தினுடைய_) ப (ாவ b | |||||
முகத்திலிருந்த_) ப (ாவ b | |||||
முகத்திலிருந்து_) ப (ாவ b | |||||
_) ப (ாவனா b | _) ப (ாவனா b | ||||
_) ப (ாவனை b | _) ப (ாவனை b | ||||
_) ப (ாவித்த b | _) ப (ாவித்த b | ||||
_) ப (ீம b | _) ப (ீம b | ||||
_) ப (ீரங்கி b | _) ப (ீரங்கி b | ||||
_) ப (ீராமணர b | _) ப (ீராமணர b | ||||
_) ப (ுக்தி b | |||||
_) ப (ுட்டி b | _) ப (ுட்டி b | ||||
_) ப (ுதன b | _) ப (ுதன b | ||||
_) புத்த(K buddV | _) புத்த(K buddV | ||||
_) ப (ுத்திய b | _) ப (ுத்திய b | ||||
_) ப (ுல்லாக்க b | _) ப (ுல்லாக்க b | ||||
_) ப (ுவன b | _) ப (ுவன b | ||||
_) ப (ூகம்ப b | |||||
_) ப (ூகோல b | _) ப (ூகோல b | ||||
_) ப (ூட்ஸ b | _) ப (ூட்ஸ b | ||||
_) ப (ூதகணங்க b | |||||
_) ப (ூதங் b | _) ப (ூதங் b | ||||
_) ப (ூதத் b | _) ப (ூதத் b | ||||
_) ப (ூதம b | _) ப (ூதம b | ||||
_) ப (ூமாதேவி b | _) ப (ூமாதேவி b | ||||
_) ப (ூமி b | _) ப (ூமி b | ||||
_) ப (ூலோக b | _) ப (ூலோக b | ||||
_) ப (ூவுலக b | |||||
_) ப (ெங்களூர b | _) ப (ெங்களூர b | ||||
_) ப (ெட்ரூம b | _) ப (ெட்ரூம b | ||||
_) ப (ெர்லிங b | _) ப (ெர்லிங b | ||||
_) ப (ெல் b | _) ப (ெல் b | ||||
_) ப (ெஸ்ட் b | |||||
_) ப (ேஜார b | _) ப (ேஜார b | ||||
_) ப (ேட்டரி b | _) ப (ேட்டரி b | ||||
_) ப (ேதலித்த b | _) ப (ேதலித்த b | ||||
_) ப (ைரவ b | _) ப (ைரவ b | ||||
_) ப (ொம்மல b | _) ப (ொம்மல b | ||||
_) ப (ொம்மை b | _) ப (ொம்மை b | ||||
_) ப (ோகங்க b | |||||
_) ப (ோஜ b | _) ப (ோஜ b | ||||
_) ப (ோதன b | _) ப (ோதன b | ||||
_) ப (ோதித் b | _) ப (ோதித் b | ||||
//sort | //sort | ||||
இயல்) ப bV# | |||||
பரிதா) ப (+ bV# | |||||
அனுதா) ப (+ bV# | |||||
நன்) ப (கல pV | நன்) ப (கல pV | ||||
பின்) ப (கல pV | பின்) ப (கல pV | ||||
முன்) ப (கல pV | முன்) ப (கல pV | ||||
நாலா) ப (க்க pV | |||||
வட) ப (குதி pV | |||||
தென்) ப (குதி pV | |||||
ப (க்கK pV | |||||
ப (டி pV | ப (டி pV | ||||
மறு) ப (டி bV | |||||
@) ப (ட்ச+ pV | @) ப (ட்ச+ pV | ||||
ப (ண pV | ப (ண pV | ||||
_சிவ) ப (த pV | |||||
கஜ) பதி pVti | |||||
கண) பதி pVti | |||||
ரகு) பதி pVti | |||||
சீதா) பதி pVti | |||||
சேது) பதி pVti | |||||
தரணி) பதி pVti | |||||
மகுட) பதி pVti | |||||
பிரகஸ்) பதி pVti | |||||
லக்ஷ்மி) பதி pVti | |||||
வித்யா) பதி pVti | |||||
அம்பிகா) பதி pVti | |||||
வளையா) பதி pVti | |||||
வேங்கட) பதி pVti | |||||
மின்) ப (திப்ப+ pV | |||||
காண்) பத (ில bVd | |||||
பதை) ப (தை pV | பதை) ப (தை pV | ||||
கல்) ப (னா pV | கல்) ப (னா pV | ||||
நிரு) ப (மா pV | நிரு) ப (மா pV | ||||
அனு) ப (மா pV | அனு) ப (மா pV | ||||
_ஊடு) ப (யிர pV | |||||
பல) ப (ல pV | |||||
_மூடு) ப (ல்லக் pV | |||||
பள) ப (ள pV | |||||
வட) ப (ழ pV | |||||
வீண்) ப (ழி pV | |||||
_தீ) ப (ா p | |||||
சமன்) ப (ாட p | சமன்) ப (ாட p | ||||
முரன்) ப (ாட p | முரன்) ப (ாட p | ||||
ப (ாண்டி p | ப (ாண்டி p | ||||
ப (ாதை p | ப (ாதை p | ||||
ச) பாபதி ba:pVti | |||||
எதிர்) ப (ார p | எதிர்) ப (ார p | ||||
_கா) ப (ாலி b | |||||
அட) ப (ாவ p | அட) ப (ாவ p | ||||
வீண்) ப (ாவ p | |||||
அடி) ப (ாவி p | |||||
கோ) ப (ி p | கோ) ப (ி p | ||||
ஆண்) ப (ிள்ளை p | |||||
பெண்) ப (ிள்ளை p | |||||
பூம்) ப (ுகார p | |||||
ம்) ப (ுரா b | ம்) ப (ுரா b | ||||
நாலா) ப (ுற p | |||||
ப (ுறK p | |||||
மண்) ப (ுழு p | |||||
பூம்) ப (ுஹார p | |||||
ம்) ப (ூர b | ம்) ப (ூர b | ||||
ராம்) ப (ூர p | ராம்) ப (ூர p | ||||
அ) ப (ூர்வ b | அ) ப (ூர்வ b | ||||
இன்ஸ்) ப (ெக்டர p | இன்ஸ்) ப (ெக்டர p | ||||
இளம்) ப (ெண் p | |||||
ப (ெருமான p | |||||
ப (ெற p // ?? end-of-word + suffix ?? | ப (ெற p // ?? end-of-word + suffix ?? | ||||
வீண்) ப (ேச்ச p | |||||
ப (ோக_ p | |||||
ப (ோகின்ற p | |||||
ப (ோகிற p | |||||
ப (ோதிலும்+ p | ப (ோதிலும்+ p | ||||
ப (ோது+ p | ப (ோது+ p | ||||
ப (ோதும்+ p | ப (ோதும்+ p | ||||
ப (ோதும்_+ p | ப (ோதும்_+ p | ||||
ப (ோதே_+ p | ப (ோதே_+ p | ||||
ப (ோன_ p | |||||
ப (ோனா p | |||||
ப (ோன்ற+ p // ?? end-of-word + suffix ?? | ப (ோன்ற+ p // ?? end-of-word + suffix ?? | ||||
ப (ோய் p | ப (ோய் p | ||||
ப (ோல_ p | ப (ோல_ p | ||||
ப (ோலப்_ p | ப (ோலப்_ p | ||||
ப (ோலவே_ p | ப (ோலவே_ p | ||||
ப (ோல்_+ p | ப (ோல்_+ p | ||||
ப (ோவத p | |||||
_டே) ப (் p | |||||
கர்) ப்ப bbV# | கர்) ப்ப bbV# | ||||
நிர்) ப்ப (ந்த bbV | நிர்) ப்ப (ந்த bbV | ||||
_ர) ப்ப (ர bbV | _ர) ப்ப (ர bbV | ||||
துர்) ப்ப (ாக்கிய bb | துர்) ப்ப (ாக்கிய bb | ||||
ஆர்) ப்ப (ாட்ட bb | |||||
துர்) ப்ப (ோதனை bb | |||||
கம்) ப்யூட (ர pjU:t.V | |||||
//endsort | //endsort | ||||
// If ப+ appearing in the middle of a word is followed by ட+ | // If ப+ appearing in the middle of a word is followed by ட+ | ||||
ம்) ப (Bட b | ம்) ப (Bட b | ||||
//sort | //sort | ||||
சித்தப்) பி(ரமை b | |||||
_) பி(ராந்தியு b | |||||
ஜெய) பி (ர p | |||||
_) பி (ரகதீ b | _) பி (ரகதீ b | ||||
_) பி (ரகலாதன p | _) பி (ரகலாதன p | ||||
_) பி (ரகஸ்பதி b | _) பி (ரகஸ்பதி b | ||||
_) பி (ரகாஷ p | _) பி (ரகாஷ p | ||||
_) பி (ரக்ஞை p | _) பி (ரக்ஞை p | ||||
_) பி (ரசங் p | _) பி (ரசங் p | ||||
_) பி (ரசன்ந p | |||||
_) பி (ரசன்ன p | _) பி (ரசன்ன p | ||||
_) பி (ரசவ p | _) பி (ரசவ p | ||||
_) பி (ரசாத p | _) பி (ரசாத p | ||||
_) பிரச (ார prVtS | _) பிரச (ார prVtS | ||||
_) பி (ரசித்த p | _) பி (ரசித்த p | ||||
_) பி (ரசித்தி p | _) பி (ரசித்தி p | ||||
_) பி (ரசுர p | |||||
_) பி (ரச்சனை p | _) பி (ரச்சனை p | ||||
_) பிரச (்னை prVtS | _) பிரச (்னை prVtS | ||||
_) பி (ரஜ p | _) பி (ரஜ p | ||||
_) பி (ரமிப்ப b | _) பி (ரமிப்ப b | ||||
_) பி (ரமுகர p | _) பி (ரமுகர p | ||||
_) பி (ரமை b | _) பி (ரமை b | ||||
வீண்) பி (ரமை b | |||||
_) பி (ரம்ம b | _) பி (ரம்ம b | ||||
_) பி (ரம்மன b | _) பி (ரம்மன b | ||||
_) பி (ரம்மை b | _) பி (ரம்மை b | ||||
_) பி (ரயத்தன p | _) பி (ரயத்தன p | ||||
_) பி (ரயா p | _) பி (ரயா p | ||||
_) பி (ரயோக p | _) பி (ரயோக p | ||||
துஷ்) பி (ரயோக p | |||||
_) பி (ரயோசன p | _) பி (ரயோசன p | ||||
_) பி (ரயோஜன p | _) பி (ரயோஜன p | ||||
_) பி (ரலய p | _) பி (ரலய p | ||||
_) பி (ரவேச p | _) பி (ரவேச p | ||||
_) பி (ரவேசி p | _) பி (ரவேசி p | ||||
_) பி (ரஷ்ட p | _) பி (ரஷ்ட p | ||||
_) பி (ரஸாத p | |||||
_) பி (ரஸ்தா p | _) பி (ரஸ்தா p | ||||
_) பி (ரஹலாத p | _) பி (ரஹலாத p | ||||
_) பி (ராகார p | _) பி (ராகார p | ||||
_) பி (ராணன p | _) பி (ராணன p | ||||
_) பி (ராணி p | _) பி (ராணி p | ||||
_) பி (ராண்ட p | |||||
_) பி (ராதித் p | _) பி (ராதித் p | ||||
பயப்) பி (ராந்தி b | |||||
மனப்) பி (ராந்தி b | |||||
_) பி (ராந்தியங் p | |||||
_) பி (ராந்தியத் p | |||||
_) பி (ராந்தியம்_ p | |||||
_) பி (ராந்தியை b | |||||
_) பி (ரான்தி_ b | |||||
_) பி (ராப் p | _) பி (ராப் p | ||||
_) பி (ராமண b | _) பி (ராமண b | ||||
_) பி (ராமணன b | _) பி (ராமணன b | ||||
_) பி (ராமின்_ b | |||||
பி (ராய p | பி (ராய p | ||||
_) பி (ரார்தன p | _) பி (ரார்தன p | ||||
_) பி (ரார்தி p | _) பி (ரார்தி p | ||||
_) பி (ரார்த்த p | |||||
_) பி (ரிட b | _) பி (ரிட b | ||||
_) பி (ரித்தானி b | _) பி (ரித்தானி b | ||||
_) பி (ரியன p | _) பி (ரியன p | ||||
வ vV | வ vV | ||||
வ (B v | வ (B v | ||||
_) வி (யா v | _) வி (யா v | ||||
வி (யூக v | |||||
.group ஶ | .group ஶ | ||||
ஆ a: | ஆ a: | ||||
இ i | இ i | ||||
_) இ (ரா // silent before 'raa' | |||||
_) இ (ராக i | |||||
_) இ (ரான i | |||||
_) இ (லட்சிய // silent | _) இ (லட்சிய // silent | ||||
_) இ (ரகசிய // silent | _) இ (ரகசிய // silent | ||||
_) இ (லேச // silent | _) இ (லேச // silent | ||||
_) இ (ரத்த | _) இ (ரத்த | ||||
_) இ (ராம | |||||
_) இ (ராவண | |||||
_) இ (ராத்த | |||||
_) இ (ராஜ | |||||
_) இ (ராணுவ | |||||
_) இ (லகுவாக | |||||
ஈ i: | ஈ i: | ||||
// letters | |||||
//vi_list | |||||
// chữ cái - ABC | |||||
b be | b be | ||||
c se | c se | ||||
d de | d de | ||||
đ d@: | đ d@: | ||||
f E3p | f E3p | ||||
g g@: | |||||
g D'e7 | |||||
h ha3t | h ha3t | ||||
j gi | j gi | ||||
k ka: | k ka: | ||||
l E | |||||
m Em | |||||
n En | |||||
l El@:2 | |||||
m Em@:2 | |||||
n En@:2 | |||||
p pe | p pe | ||||
q kwi | q kwi | ||||
r E | |||||
s E3t | |||||
r Ez.@:2 | |||||
s E3s | |||||
t te | t te | ||||
v ve | v ve | ||||
w v'ek,E3p | w v'ek,E3p | ||||
x i3ts; | |||||
x i3c | |||||
z zE3t | z zE3t | ||||
// numbers | |||||
_0 J'e1z.'o // dê-rô | |||||
// số - numbers | |||||
_0 x,o1N // không | |||||
_1 m'o6t[ // một | _1 m'o6t[ // một | ||||
_2 h'a:I // hai | _2 h'a:I // hai | ||||
_3 _b'a: // ba | _3 _b'a: // ba | ||||
_8 t['a:3m // tám | _8 t['a:3m // tám | ||||
_9 c'i3n // chín | _9 c'i3n // chín | ||||
_1X m'y@2j // mười | _1X m'y@2j // mười | ||||
_2X h'a:I||m'y@2j // hai mười | |||||
_3X _b'a:||m'y@2j // ba mười | |||||
_4X _b'o3n||m'y@2j // bốn mười | |||||
_5X n'am||m'y@2j // năm mười | |||||
_6X s.'aU3||m'y@2j // sáu mười | |||||
_7X _b'aI4||m'y@2j // bảy mười | |||||
_8X t['a:3m||m'y@2j // tám mười | |||||
_9X c'i3n||m'y@2j // chín mười | |||||
_2X h'a:I||m'y@7j // hai mươi | |||||
_3X _b'a:||m'y@7j // ba mươi | |||||
_4X _b'o3n||m'y@7j // bốn mươi | |||||
_5X n'am||m'y@7j // năm mươi | |||||
_6X s.'aU3||m'y@7j // sáu mươi | |||||
_7X _b'aI4||m'y@7j // bảy mươi | |||||
_8X t['a:3m||m'y@7j // tám mươi | |||||
_9X c'i3n||m'y@7j // chín mươi | |||||
_21 h'a:I||m'y@2j||m'o3t[ | |||||
_31 _b'a:||m'y@2j||m'o3t[ | |||||
_41 _b'o3n||m'y@2j||m'o3t[ | |||||
_51 n'am||m'y@2j||m'o3t[ | |||||
_61 s.'aU3||m'y@2j||m'o3t[ | |||||
_71 _b'aI4||m'y@2j||m'o3t[ | |||||
_81 t['a:3m||m'y@2j||m'o3t[ | |||||
_91 c'i3n||m'y@2j||m'o3t[ | |||||
_21 h'a:I||m'y@7j||m'o3t[ | |||||
_31 _b'a:||m'y@7j||m'o3t[ | |||||
_41 _b'o3n||m'y@7j||m'o3t[ | |||||
_51 n'am||m'y@7j||m'o3t[ | |||||
_61 s.'aU3||m'y@7j||m'o3t[ | |||||
_71 _b'aI4||m'y@7j||m'o3t[ | |||||
_81 t['a:3m||m'y@7j||m'o3t[ | |||||
_91 c'i3n||m'y@7j||m'o3t[ | |||||
_25 h'a:I||m'y@2j||l'a7m | |||||
_35 _b'a:||m'y@2j||l'a7m | |||||
_45 _b'o3n||m'y@2j||l'a7m | |||||
_55 n'am||m'y@2j||l'a7m | |||||
_65 s.'aU3||m'y@2j||l'a7m | |||||
_75 _b'aI4||m'y@2j||l'a7m | |||||
_85 t['a:3m||m'y@2j||l'a7m | |||||
_95 c'i3n||m'y@2j||l'a7m | |||||
_25 h'a:I||m'y@7j||l'a7m | |||||
_35 _b'a:||m'y@7j||l'a7m | |||||
_45 _b'o3n||m'y@7j||l'a7m | |||||
_55 n'am||m'y@7j||l'a7m | |||||
_65 s.'aU3||m'y@7j||l'a7m | |||||
_75 _b'aI4||m'y@7j||l'a7m | |||||
_85 t['a:3m||m'y@7j||l'a7m | |||||
_95 c'i3n||m'y@7j||l'a7m | |||||
_0C cr'am // trăm | _0C cr'am // trăm | ||||
_0M1 N'a:2n // ngàn | _0M1 N'a:2n // ngàn | ||||
_0and l,in^ // linh | _0and l,in^ // linh | ||||
_dpt _f,@I4_ | _dpt _f,@I4_ | ||||
// symbols | |||||
_, f@I4 | |||||
// kí hiệu - symbols | |||||
~ J'@U3N'a:5 | |||||
` J'@U3hw'i@2n | |||||
_! J'@U3c'@3mt'a:7n | |||||
@ a:1k'O2N | |||||
# J'@U3t'a7N $max3 | |||||
$ J'@U3_d'o1l'a:7 | |||||
% f'@2ncr'a7m | |||||
^ J'@U3m'u5 | |||||
& J'@U3v,a:2 | |||||
* J'@U3s.'a:U7 $max3 | |||||
_( m'@:4Nw'a6kh | |||||
_) _d'O3NNw'a6kh | |||||
_- Q'a:6cN'a:7N | |||||
__ Q'a:6cJ'y@3j | |||||
= J'@U3_b'a2N $max3 | |||||
+ J'@U3k'o6N $max3 | |||||
_{ m'@:4Nw'a6khn^'O6n | |||||
_} _d'O3NNw'a6khn^'O6n | |||||
_[ m'@:4Nw'a6khv'u@7N | |||||
_] _d'O3NNw'a6khv'u@7N | |||||
_| s'o4t'a4N | |||||
_\ s'o4f,a:I4 | |||||
_: h'a:I1c'@3m | |||||
_; c'@3mf'@I4 | |||||
_' Nw'a6kh_d'@:7n | |||||
_“ Nw'a6khk'E3p | |||||
_, f'@I4 | |||||
_. c'@3m | |||||
_/ s'o4cr'a:I3 | |||||
_< n^'O4h'@:7n | |||||
_> l'@:3nh'@:7n | |||||
_? h'OI4c'@3m | |||||
// ?? found in festival wow_vi_ptn_phrasing.scm | // ?? found in festival wow_vi_ptn_phrasing.scm | ||||
bị $u | bị $u | ||||
vì $u | vì $u | ||||
với $u | với $u | ||||
internet int@:n'E3t | |||||
// từ gốc nước ngoài -common foreign language words | |||||
internet int@:n'E3t |
护 hu4 | 护 hu4 | ||||
横 heng2 | 横 heng2 | ||||
环 huan2 | 环 huan2 | ||||
似 shi4 | |||||
似 si4 | |||||
殿 dian4 | 殿 dian4 | ||||
品 pin3 | 品 pin3 | ||||
塞 sai1 | 塞 sai1 | ||||
候 hou5 | |||||
候 hou4 | |||||
蛋 dan4 | 蛋 dan4 | ||||
絲 si1 | 絲 si1 | ||||
樓 lou2 | 樓 lou2 | ||||
遥 yao2 | 遥 yao2 | ||||
司 si1 | 司 si1 | ||||
钓 diao4 | 钓 diao4 | ||||
训 xun5 | |||||
训 xun4 | |||||
奶 nai3 | 奶 nai3 | ||||
阿 a1 | 阿 a1 | ||||
倦 juan4 | 倦 juan4 | ||||
款 kuan3 | 款 kuan3 | ||||
臥 wo4 | 臥 wo4 | ||||
鵲 que5 | 鵲 que5 | ||||
訓 xun5 | |||||
訓 xun4 | |||||
鲜 xian1 | 鲜 xian1 | ||||
锭 ding4 | 锭 ding4 | ||||
奴 nu2 | 奴 nu2 |
60 phoneme tables | |||||
62 phoneme tables | |||||
new total | new total | ||||
base 99 99 | base 99 99 | ||||
consonants 9 107 | consonants 9 107 | ||||
jbo 2 111 | jbo 2 111 | ||||
nci 3 120 | nci 3 120 | ||||
fi 40 130 | fi 40 130 | ||||
fr 55 137 | |||||
fr 56 137 | |||||
fr_ca 11 137 | fr_ca 11 137 | ||||
hi 58 145 | hi 58 145 | ||||
ta 21 149 | ta 21 149 | ||||
grc 12 124 | grc 12 124 | ||||
sv 23 121 | sv 23 121 | ||||
no 28 125 | no 28 125 | ||||
is 32 125 | |||||
is 42 135 | |||||
ru 39 130 | ru 39 130 | ||||
vi 41 136 | vi 41 136 | ||||
zhy 41 133 | zhy 41 133 | ||||
ne 18 153 | ne 18 153 | ||||
pa 14 147 | pa 14 147 | ||||
prs 8 106 | prs 8 106 | ||||
sl 6 130 | |||||
gd 6 99 | gd 6 99 | ||||
bg 10 115 | |||||
Data file Used by | Data file Used by | ||||
b/b [b] base | b/b [b] base | ||||
[d[] base | [d[] base | ||||
[d] base2 | [d] base2 | ||||
[d] fi | [d] fi | ||||
[d] fr | |||||
[d.] hi | [d.] hi | ||||
[dh.] hi | [dh.] hi | ||||
[d] hu | [d] hu | ||||
[35] zh | [35] zh | ||||
envelope/vi_5amp [5] vi | envelope/vi_5amp [5] vi | ||||
envelope/vi_6amp [6] vi | envelope/vi_6amp [6] vi | ||||
g2/g [g] fr | |||||
g2/xg [gh] hi | g2/xg [gh] hi | ||||
g/g [g] base | g/g [g] base | ||||
[g-] en | [g-] en | ||||
[j] zh | [j] zh | ||||
j/j@ [j] base | j/j@ [j] base | ||||
[j] de | [j] de | ||||
[j/] fr | |||||
[j] zh | [j] zh | ||||
j/ja [j] base | j/ja [j] base | ||||
[j] de | [j] de | ||||
[j/] fr | |||||
[j] zh | [j] zh | ||||
j/je [j] base | j/je [j] base | ||||
[j] de | [j] de | ||||
[j/] fr | |||||
[j] zh | [j] zh | ||||
j/ji [j] base | j/ji [j] base | ||||
[j] de | [j] de | ||||
[j/] fr | |||||
[j] zh | [j] zh | ||||
j/jo [j] base | j/jo [j] base | ||||
[j] de | [j] de | ||||
[j/] fr | |||||
[j] zh | [j] zh | ||||
j/_j_short [j] de | j/_j_short [j] de | ||||
j/ju [j] base | j/ju [j] base | ||||
[j] de | [j] de | ||||
[j/] fr | |||||
[j] zh | [j] zh | ||||
j/xj [j] base | j/xj [j] base | ||||
[j] de | [j] de | ||||
[l/] fr | [l/] fr | ||||
l/l_@ [l/3] base | l/l_@ [l/3] base | ||||
[W] fr | [W] fr | ||||
[Y] fr | |||||
[l/] fr | [l/] fr | ||||
l/l@ [] base | l/l@ [] base | ||||
[L] base | [L] base | ||||
[W] fr | [W] fr | ||||
[Y] fr | |||||
[l] fr | [l] fr | ||||
l/L1_aL [l/] base | l/L1_aL [l/] base | ||||
[l/] de | [l/] de | ||||
l/l_4 [ll] sq | l/l_4 [ll] sq | ||||
l/la [] base | l/la [] base | ||||
[L] base | [L] base | ||||
[a] fr | |||||
[l] fr | [l] fr | ||||
l/l_a [l/3] base | l/l_a [l/3] base | ||||
[l/] fr | [l/] fr | ||||
l/l_i [l/3] base | l/l_i [l/3] base | ||||
[l/] fr | [l/] fr | ||||
[i] sq | [i] sq | ||||
ll/ll [L] bg | |||||
ll/_ll [L] bg | |||||
l/l_long [l] base | l/l_long [l] base | ||||
[l] fr | [l] fr | ||||
l/lo [] base | l/lo [] base | ||||
[l] fr | [l] fr | ||||
l/l_o [l/3] base | l/l_o [l/3] base | ||||
[l/] fr | [l/] fr | ||||
[o2] fr | |||||
l^/l_rfx [l.] base | l^/l_rfx [l.] base | ||||
l/lu [] base | l/lu [] base | ||||
[L] base | [L] base | ||||
[l] fr | [l] fr | ||||
[w^i] fr | |||||
l/l_u [l/3] base | l/l_u [l/3] base | ||||
[l/] fr | [l/] fr | ||||
l/l_vi [l] vi | l/l_vi [l] vi | ||||
ll/xll [L] bg | |||||
l/l_y [y] fr | l/l_y [y] fr | ||||
l/tl [l] base | l/tl [l] base | ||||
[l] fr | [l] fr | ||||
r3/rx [*] base | r3/rx [*] base | ||||
[r/] base | [r/] base | ||||
[r/] af | [r/] af | ||||
[r] fr | |||||
[r/] fr | |||||
[r/2] fr | [r/2] fr | ||||
[R] fr_ca | [R] fr_ca | ||||
[x] pt_pt | [x] pt_pt | ||||
[l#] is | [l#] is | ||||
ufric/s [s] base | ufric/s [s] base | ||||
[s] fr | [s] fr | ||||
[z2] fr | |||||
[s] es | [s] es | ||||
[z] sq | [z] sq | ||||
ufric/s_ [s] base | ufric/s_ [s] base | ||||
[s2] consonants | [s2] consonants | ||||
[s] fr | [s] fr | ||||
[z] fr | [z] fr | ||||
[z2] fr | |||||
[s] es | [s] es | ||||
[z;] ro | [z;] ro | ||||
[z] sq | [z] sq | ||||
[t] lv | [t] lv | ||||
[t] sk | [t] sk | ||||
[t] el | [t] el | ||||
ustop/t_short_ [t] fr | |||||
ustop/tsh_pzd [tS;] zh | ustop/tsh_pzd [tS;] zh | ||||
ustop/tsh_pzd_unasp [tS;] zh | ustop/tsh_pzd_unasp [tS;] zh | ||||
ustop/tsh_sr [tS] sr | ustop/tsh_sr [tS] sr | ||||
vdiph2/oa [Oa] ro | vdiph2/oa [Oa] ro | ||||
[ua] zh | [ua] zh | ||||
vdiph2/o_oo [o@] en_wi | vdiph2/o_oo [o@] en_wi | ||||
[o] is | |||||
[O:] is | |||||
[o] zh | [o] zh | ||||
vdiph2/u#@ [U@] en_sc | vdiph2/u#@ [U@] en_sc | ||||
vdiph2/uaa [uo] lv | vdiph2/uaa [uo] lv | ||||
vdiph/aai_3 [ai] fi | vdiph/aai_3 [ai] fi | ||||
vdiph/aau [au] fi | vdiph/aau [au] fi | ||||
[au] lv | [au] lv | ||||
[aU] is | |||||
[aU:] is | |||||
vdiph/aau_2 [aU] en_wi | vdiph/aau_2 [aU] en_wi | ||||
[aU] de | [aU] de | ||||
[VU] nl | [VU] nl | ||||
vdiph/ai_7 [aI] en_sc | vdiph/ai_7 [aI] en_sc | ||||
[aI2] en_sc | [aI2] en_sc | ||||
[aI] is | [aI] is | ||||
[aI:] is | |||||
vdiph/ai_8 [aI] ta | vdiph/ai_8 [aI] ta | ||||
vdiph/aoo [aU] en_us | vdiph/aoo [aU] en_us | ||||
vdiph/au [aU] en | vdiph/au [aU] en | ||||
[aU] eo | [aU] eo | ||||
[aU] sk | [aU] sk | ||||
[aU] it | [aU] it | ||||
[aU] is | |||||
[aU] id | [aU] id | ||||
vdiph/ee-e [E:] hi | vdiph/ee-e [E:] hi | ||||
vdiph/eei [EI] base2 | vdiph/eei [EI] base2 | ||||
[eI] la | [eI] la | ||||
[eI] pt | [eI] pt | ||||
[eI] is | [eI] is | ||||
[eI:] is | |||||
[eI] vi | [eI] vi | ||||
[ei] zhy | [ei] zhy | ||||
vdiph/eu [eU] base2 | vdiph/eu [eU] base2 | ||||
vdiph/&i_3 [aI] vi | vdiph/&i_3 [aI] vi | ||||
vdiph/ii [iI] ro | vdiph/ii [iI] ro | ||||
vdiph/i#i [yI] ro | vdiph/i#i [yI] ro | ||||
vdiph/oa_fr [w^a] fr | |||||
vdiph/oi [oI] base2 | vdiph/oi [oI] base2 | ||||
[OI] en_wm | [OI] en_wm | ||||
[OY] de | [OY] de | ||||
[oI] it | [oI] it | ||||
[OI] la | [OI] la | ||||
[OI] is | |||||
[oI] vi | [oI] vi | ||||
[oI] ne | [oI] ne | ||||
vdiph/oi_2 [oI] af | vdiph/oi_2 [oI] af | ||||
vdiph/ou_2 [oU] sk | vdiph/ou_2 [oU] sk | ||||
[oU] ro | [oU] ro | ||||
vdiph/ou_3 [oU] is | vdiph/ou_3 [oU] is | ||||
[oU2] is | |||||
[oU:] is | |||||
vdiph/@u [u:] en_wm | vdiph/@u [u:] en_wm | ||||
[@U] vi | [@U] vi | ||||
[@:U] vi | [@:U] vi | ||||
[yi] zh | [yi] zh | ||||
vdiph/y#i [Yi] fi | vdiph/y#i [Yi] fi | ||||
vdiph/y#i_2 [Yy] is | vdiph/y#i_2 [Yy] is | ||||
[Yy:] is | |||||
vdiph/yi_fr [w^i] fr | vdiph/yi_fr [w^i] fr | ||||
vdiph/y#y [Yy] fi | vdiph/y#y [Yy] fi | ||||
vdiph/y#y_2 [Yy] af | vdiph/y#y_2 [Yy] af | ||||
vocw/zh_rfx [z.] base | vocw/zh_rfx [z.] base | ||||
voc/z [z] base | voc/z [z] base | ||||
[z] fr | [z] fr | ||||
[z2] fr | |||||
[z;] ro | [z;] ro | ||||
[z] sq | [z] sq | ||||
voc/z_ [z] base | voc/z_ [z] base | ||||
[dz] consonants | [dz] consonants | ||||
[z] fr | [z] fr | ||||
[z2] fr | |||||
[z;] ro | [z;] ro | ||||
[z] sq | [z] sq | ||||
voc/zh [Z] base | voc/zh [Z] base | ||||
[@4] hi | [@4] hi | ||||
[@] hy | [@] hy | ||||
[@] ml | [@] ml | ||||
[@] sl | |||||
vowel/@- [@-] base | vowel/@- [@-] base | ||||
[r*] hr | [r*] hr | ||||
vowel/& [a] en_rp | vowel/& [a] en_rp | ||||
[a] it | [a] it | ||||
[a] zh | [a] zh | ||||
[a] id | [a] id | ||||
[a] bg | |||||
vowel/a# [a] base2 | vowel/a# [a] base2 | ||||
[a/] base2 | [a/] base2 | ||||
[a2] en_sc | [a2] en_sc | ||||
vowel/a#_2 [a#] pl | vowel/a#_2 [a#] pl | ||||
[&] hr | [&] hr | ||||
[a2] sv | [a2] sv | ||||
[&] is | |||||
[a] is | |||||
[a/] sw | [a/] sw | ||||
vowel/a_3 [a] en_sc | vowel/a_3 [a] en_sc | ||||
[a/] en_sc | [a/] en_sc | ||||
[a:] lv | [a:] lv | ||||
[a:] cs | [a:] cs | ||||
[a:] la | [a:] la | ||||
[a] is | |||||
[A] zh | [A] zh | ||||
[a] sq | [a] sq | ||||
[A] da | [A] da | ||||
[a] ml | [a] ml | ||||
vowel/a_4 [a/] el | vowel/a_4 [a/] el | ||||
[a] vi | [a] vi | ||||
vowel/a_5 [a] fr | |||||
[a:] ta | |||||
vowel/a#_4 [a] bg | |||||
vowel/a_5 [a:] ta | |||||
[a/] it | [a/] it | ||||
[a] la | [a] la | ||||
[a] sv | [a] sv | ||||
[a] sw | [a] sw | ||||
[a] tr | [a] tr | ||||
[a:] ml | [a:] ml | ||||
vowel/a_6 [a] fr | |||||
[a] ca | |||||
vowel/a_6 [a] ca | |||||
[a:] vi | [a:] vi | ||||
vowel/a_7 [a] fr | |||||
vowel/aa [A] fr_ca | vowel/aa [A] fr_ca | ||||
[A] no | [A] no | ||||
[A:] no | [A:] no | ||||
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 | ||||
[a:] is | |||||
vowel/aa_9 [a] fi | vowel/aa_9 [a] fi | ||||
[a:] hi | [a:] hi | ||||
[a] ne | [a] ne | ||||
[V] ne | [V] ne | ||||
[@/] ne | [@/] ne | ||||
[@] pa | [@] pa | ||||
[@] bg | |||||
vowel/e [e] base2 | vowel/e [e] base2 | ||||
[e:] en | [e:] en | ||||
[eI] en_n | [eI] en_n | ||||
[e] ml | [e] ml | ||||
[e:] ml | [e:] ml | ||||
[e] ne | [e] ne | ||||
[e] sl | |||||
vowel/e# [I] en_sc | vowel/e# [I] en_sc | ||||
vowel/e_2 [eI] en_sc | vowel/e_2 [eI] en_sc | ||||
[e:] de | [e:] de | ||||
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 | ||||
[e] is | |||||
[E:] is | |||||
vowel/ee# [E#] pl | vowel/ee# [E#] pl | ||||
vowel/ee_1 [E] base2 | vowel/ee_1 [E] base2 | ||||
[e@] en | [e@] en | ||||
[E:] sv | [E:] sv | ||||
[E:] no | [E:] no | ||||
[e] zhy | [e] zhy | ||||
[E] sl | |||||
vowel/ee_2 [E] cy | vowel/ee_2 [E] cy | ||||
[E2] nl | [E2] nl | ||||
[E] zh | [E] zh | ||||
[E2] id | [E2] id | ||||
[e] hy | [e] hy | ||||
[E] prs | [E] prs | ||||
[e] bg | |||||
vowel/e_mid2 [E] af | vowel/e_mid2 [E] af | ||||
[E] de | [E] de | ||||
[E2] de | [E2] de | ||||
[e] tr | [e] tr | ||||
[e] sq | [e] sq | ||||
[E] da | [E] da | ||||
[e] bg | |||||
vowel/@_fnt [@] en_wi | vowel/@_fnt [@] en_wi | ||||
[@2] en_wi | [@2] en_wi | ||||
[@2] hr | [@2] hr | ||||
vowel/@_fr [3] en_n | vowel/@_fr [3] en_n | ||||
[@2] fr | |||||
vowel/@_hgh [@] fr | vowel/@_hgh [@] fr | ||||
[@] hr | [@] hr | ||||
vowel/i [i] base2 | vowel/i [i] base2 | ||||
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_4 [i] fi | vowel/i_4 [i] fi | ||||
[i] hu | [i] hu | ||||
[I] it | [I] it | ||||
[i] is | |||||
[i:] is | |||||
[i] vi | [i] vi | ||||
[i] da | [i] da | ||||
vowel/i_5 [i:] en_sc | vowel/i_5 [i:] en_sc | ||||
[i] ku | [i] ku | ||||
[i] id | [i] id | ||||
[i] ml | [i] ml | ||||
[i] bg | |||||
vowel/i#_6 [i.] zh | vowel/i#_6 [i.] zh | ||||
vowel/i_7 [i] pl | vowel/i_7 [i] pl | ||||
[i] sq | [i] sq | ||||
vowel/i#_7 [i[] zh | vowel/i#_7 [i[] zh | ||||
vowel/i_8 [i] fr | |||||
vowel/i_en [i:] en | vowel/i_en [i:] en | ||||
[i:] en_us | [i:] en_us | ||||
vowel/i_fnt [i:] en_wi | vowel/i_fnt [i:] en_wi | ||||
[I] fr_ca | [I] fr_ca | ||||
[I] nl | [I] nl | ||||
[I] is | [I] is | ||||
[I:] is | |||||
[i] zhy | [i] zhy | ||||
[I] ku | [I] ku | ||||
[I#] sq | [I#] sq | ||||
[I] en_us | [I] en_us | ||||
vowel/ii_5 [I] la | vowel/ii_5 [I] la | ||||
[i] zh | [i] zh | ||||
[i] bg | |||||
vowel/ii_6 [I] en_wm | vowel/ii_6 [I] en_wm | ||||
[I] en_wi | [I] en_wi | ||||
[I2] en_wi | [I2] en_wi | ||||
[I] pt | [I] pt | ||||
[y] pt | [y] pt | ||||
[i/] pt | [i/] pt | ||||
[i] is | |||||
[I] sq | [I] sq | ||||
vowel/ii_en [i] en | vowel/ii_en [i] en | ||||
[i] sq | [i] sq | ||||
[o] ml | [o] ml | ||||
[o:] ml | [o:] ml | ||||
[o:] pa | [o:] pa | ||||
[o] sl | |||||
vowel/o_2 [o:] cy | vowel/o_2 [o:] cy | ||||
[o:] hi | [o:] hi | ||||
[o:] hu | [o:] hu | ||||
[o] hu | [o] hu | ||||
[o] tr | [o] tr | ||||
[o] ne | [o] ne | ||||
[o] bg | |||||
vowel/o_mid2 [O] fr | vowel/o_mid2 [O] fr | ||||
vowel/oo [O:] en_sc | vowel/oo [O:] en_sc | ||||
[O] en_wi | [O] en_wi | ||||
[O] tr | [O] tr | ||||
[O] id | [O] id | ||||
[o] prs | [o] prs | ||||
[o] bg | |||||
vowel/oo_1 [O:] en_n | vowel/oo_1 [O:] en_n | ||||
[O:] en_rp | [O:] en_rp | ||||
[O@] en_rp | [O@] en_rp | ||||
vowel/oo_5 [O] pl | vowel/oo_5 [O] pl | ||||
[O] is | [O] is | ||||
[O] sq | [O] sq | ||||
[O] sl | |||||
vowel/oo_en [O] en | vowel/oo_en [O] en | ||||
[O:] en | [O:] en | ||||
[O@] en | [O@] en | ||||
[u] sk | [u] sk | ||||
[U] hr | [U] hr | ||||
[u] ro | [u] ro | ||||
[u] is | |||||
[u] tr | [u] tr | ||||
[u] bg | |||||
vowel/u#_2 [u-] ta | vowel/u#_2 [u-] ta | ||||
[u-] sv | [u-] sv | ||||
vowel/u#_3 [U] ta | vowel/u#_3 [U] ta | ||||
[u] pt | [u] pt | ||||
[u:] sv | [u:] sv | ||||
[u:] no | [u:] no | ||||
[u] is | |||||
[u:] is | |||||
[u] zhy | [u] zhy | ||||
[u] zh | [u] zh | ||||
[u] sq | [u] sq | ||||
[u#] rw | [u#] rw | ||||
[u] ne | [u] ne | ||||
[u] pa | [u] pa | ||||
[u] bg | |||||
vowel/u_bck2 [u] fr | vowel/u_bck2 [u] fr | ||||
[u:] fr | [u:] fr | ||||
[u:] la | [u:] la | ||||
[U] pa | [U] pa | ||||
vowel/V [3] en_sc | vowel/V [3] en_sc | ||||
[W#] da | [W#] da | ||||
[@] bg | |||||
vowel/V_2 [V] en | vowel/V_2 [V] en | ||||
[a] af | [a] af | ||||
[V] ru | [V] ru | ||||
[V] hi | [V] hi | ||||
[V] ta | [V] ta | ||||
[V] pa | [V] pa | ||||
[a] bg | |||||
vowel/V_4 [V] en_sc | vowel/V_4 [V] en_sc | ||||
[V] da | [V] da | ||||
vowel/V_6 [V] en_us | vowel/V_6 [V] en_us | ||||
vowel/y [y] base2 | vowel/y [y] base2 | ||||
[y:] de | [y:] de | ||||
[y] fi | [y] fi | ||||
[y] fr | |||||
[y:] hu | [y:] hu | ||||
[y] nl | [y] nl | ||||
[y] la | [y] la | ||||
[8] nl | [8] nl | ||||
[Y] ro | [Y] ro | ||||
[oe] zhy | [oe] zhy | ||||
vowel/y## [y#] is | |||||
vowel/y_2 [y] fr | |||||
[y:] la | |||||
vowel/y## [y] is | |||||
vowel/y_2 [y:] la | |||||
[y] zh | [y] zh | ||||
vowel/y#_2 [Y] hu | vowel/y#_2 [Y] hu | ||||
[Y:] sv | [Y:] sv | ||||
vowel/y_3 [y] af | vowel/y_3 [y] af | ||||
vowel/y#_3 [W] is | vowel/y#_3 [W] is | ||||
[W:] is | |||||
vowel/y_4 [y:] no | vowel/y_4 [y:] no | ||||
vowel/y_5 [y:] sv | vowel/y_5 [y:] sv | ||||
[y] tr | [y] tr | ||||
vowel/yy_4 [y] de | vowel/yy_4 [y] de | ||||
[y] hu | [y] hu | ||||
[y] grc | [y] grc | ||||
[y] is | |||||
[y:] is | |||||
[yI] is | |||||
[y] hy | [y] hy | ||||
vwl_af/@ [@] af | vwl_af/@ [@] af | ||||
vwl_af/I [I] af | vwl_af/I [I] af | ||||
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/@2r [é”] fr | |||||
vwl_fr/a2r [é”] fr | |||||
vwl_fr/aa2r [é”] fr | |||||
vwl_fr/e2r [é”] fr | |||||
vwl_fr/ee2r [é”] fr | |||||
vwl_fr/i2r [é”] fr | |||||
vwl_fr/o2r [é”] fr | |||||
vwl_fr/oo2r [é”] fr | |||||
vwl_fr/r [r] fr | vwl_fr/r [r] fr | ||||
[r2] fr | [r2] fr | ||||
vwl_fr/_r [r] fr | |||||
vwl_fr/r_ [r/2] fr | |||||
vwl_fr/r_@ [r/2] fr | |||||
vwl_fr/r@ [ j] fr | |||||
vwl_fr/r_ [r/] fr | |||||
vwl_fr/r_@ [r/] fr | |||||
vwl_fr/r@ [é”] fr | |||||
vwl_fr/@R [x] pt_pt | vwl_fr/@R [x] pt_pt | ||||
vwl_fr/r_2 [r/2] fr | |||||
vwl_fr/@R2 [R] fr_ca | vwl_fr/@R2 [R] fr_ca | ||||
vwl_fr/ra [ j] fr | |||||
vwl_fr/r_a [r/2] fr | |||||
vwl_fr/raa [A~] fr | |||||
vwl_fr/r_an [A~] fr | |||||
vwl_fr/re [ j] fr | |||||
vwl_fr/r_e [r/2] fr | |||||
vwl_fr/r_e2 [E] fr | |||||
vwl_fr/ri [ j] fr | |||||
vwl_fr/r_i [r/2] fr | |||||
vwl_fr/ro [ j] fr | |||||
vwl_fr/r_o [r/2] fr | |||||
vwl_fr/ro2 [O] fr | |||||
vwl_fr/r_o2 [O] fr | |||||
vwl_fr/ru [ j] fr | |||||
vwl_fr/r_u [r/2] fr | |||||
vwl_fr/ry [y] fr | |||||
[w^i] fr | |||||
vwl_fr/r_y [y] fr | |||||
vwl_fr/tr [r] fr | |||||
vwl_fr/trr [r/2] fr | |||||
vwl_fr/xr [ j] fr | |||||
vwl_fr/ra [é”] fr | |||||
vwl_fr/r_a [r/] fr | |||||
vwl_fr/raa [é”] fr | |||||
vwl_fr/re [é”] fr | |||||
vwl_fr/r_e [r/] fr | |||||
vwl_fr/ree [é”] fr | |||||
vwl_fr/ri [é”] fr | |||||
vwl_fr/r_i [r/] fr | |||||
vwl_fr/rj [é”] fr | |||||
vwl_fr/r_n [r/] fr | |||||
vwl_fr/ro [é”] fr | |||||
vwl_fr/r_o [r/] fr | |||||
vwl_fr/roo [é”] fr | |||||
vwl_fr/rr [r/] fr | |||||
vwl_fr/ru [é”] fr | |||||
vwl_fr/r_u [r/] fr | |||||
vwl_fr/ry [é”] fr | |||||
vwl_fr/tr [r/2] fr | |||||
vwl_fr/trr [r/] fr | |||||
vwl_fr/u2r [é”] fr | |||||
vwl_fr/y2r [é”] fr | |||||
vwl_hi/l-voc [l-] base | vwl_hi/l-voc [l-] base | ||||
[l-] sk | [l-] sk | ||||
[l:] sk | [l:] sk |
lengthmod 7 | lengthmod 7 | ||||
IF nextPh(isNotVowel) THEN | IF nextPh(isNotVowel) THEN | ||||
ChangePhoneme(l/2) | |||||
IF prevPh(isNotVowel) THEN | |||||
ChangePhoneme(l/) | |||||
ELSE | |||||
ChangePhoneme(l/2) | |||||
ENDIF | |||||
ENDIF | ENDIF | ||||
CALL base/l | CALL base/l | ||||
phoneme a | phoneme a | ||||
vowel starttype #a endtype #a | vowel starttype #a endtype #a | ||||
length 150 | |||||
length 160 | |||||
ChangeIfDiminished(a2) | ChangeIfDiminished(a2) | ||||
FMT(vowel/a) | FMT(vowel/a) | ||||
endphoneme | endphoneme | ||||
phoneme aa // 'bath' etc. | phoneme aa // 'bath' etc. | ||||
vowel starttype #a endtype #a | vowel starttype #a endtype #a | ||||
length 150 | |||||
length 190 | |||||
IfNextVowelAppend(r-) | IfNextVowelAppend(r-) | ||||
FMT(vowel/a) | FMT(vowel/a) | ||||
endphoneme | endphoneme |
//==================================================== | //==================================================== | ||||
// French | // French | ||||
//==================================================== | //==================================================== | ||||
// Updated 2010-04-01 Michel Such <[email protected]> | |||||
// Updated 2010-05-19 Michel Such <[email protected]> | |||||
phoneme #l virtual | phoneme #l virtual | ||||
// Used for l and l/ | // Used for l and l/ | ||||
endphoneme | endphoneme | ||||
phoneme #r virtual | phoneme #r virtual | ||||
// Used for r and r/2 | |||||
// Used for r, r2 and r/ | |||||
endphoneme | endphoneme | ||||
phoneme : // Lengthen previous vowel by "length" | phoneme : // Lengthen previous vowel by "length" | ||||
procedure pre_post_r | procedure pre_post_r | ||||
IF prevPh(isVowel) THEN | |||||
VowelEnding(vwl_fr/xr) | |||||
IF prevPh(y) THEN | |||||
VowelEnding(vwl_fr/y2r) | |||||
ELIF prevPh(A~) THEN | |||||
VowelEnding(vwl_fr/aa2r) | |||||
ELIF prevPh(E~) OR prevPh(W~) THEN | |||||
VowelEnding(vwl_fr/ee2r) | |||||
ELIF prevPh(O~) OR prevPh(W~) THEN | |||||
VowelEnding(vwl_fr/oo2r) | |||||
ELIF prevPh(isVowel) THEN | |||||
PrevVowelEndings | |||||
VowelEnding(vwl_fr/@2r) | |||||
VowelEnding(vwl_fr/a2r) | |||||
VowelEnding(vwl_fr/e2r) | |||||
VowelEnding(vwl_fr/i2r) | |||||
VowelEnding(vwl_fr/o2r) | |||||
VowelEnding(vwl_fr/u2r) | |||||
EndSwitch | |||||
ENDIF | ENDIF | ||||
IF nextPhW(isFinalVowel) OR next2Ph(isFinalVowel) THEN | |||||
NextVowelStarts | |||||
VowelStart(vwl_fr/r@, -10) | |||||
VowelStart(vwl_fr/ra, -15) | |||||
VowelStart(vwl_fr/re, -10) | |||||
VowelStart(vwl_fr/ri, -20) | |||||
VowelStart(vwl_fr/ro, -10) | |||||
VowelStart(vwl_fr/ru, -10) | |||||
EndSwitch | |||||
ELSE | |||||
IF nextPh(A~) THEN | |||||
VowelStart(vwl_fr/raa) | |||||
ELIF nextPh(E~) OR nextPh(W~) THEN | |||||
VowelStart(vwl_fr/ree) | |||||
ELIF nextPh(y) THEN | |||||
VowelStart(vwl_fr/ry) | |||||
ELIF nextPh(O~) THEN | |||||
VowelStart(vwl_fr/roo) | |||||
ELIF nextPh(j/) THEN | |||||
VowelStart(vwl_fr/rj) | |||||
ELIF nextPh(isVowel) THEN | |||||
NextVowelStarts | NextVowelStarts | ||||
VowelStart(vwl_fr/r@) | VowelStart(vwl_fr/r@) | ||||
VowelStart(vwl_fr/ra) | VowelStart(vwl_fr/ra) | ||||
phoneme r | phoneme r | ||||
liquid rhotic uvl | |||||
liquid rhotic vel nopause | |||||
starttype #r endtype #r | starttype #r endtype #r | ||||
lengthmod 7 | |||||
Vowelin f1=0 f2=1200 -500 500 f3=-200 100 len=65 | |||||
Vowelout f1=0 f2=1200 -500 500 f3=200 100 len=50 | |||||
lengthmod 2 | |||||
IF nextPh(isNotVowel) THEN | IF nextPh(isNotVowel) THEN | ||||
ChangePhoneme(r/2) | |||||
ChangePhoneme(r/) | |||||
ENDIF | ENDIF | ||||
CALL pre_post_r | CALL pre_post_r | ||||
IF thisPh(isWordStart) OR prevPhW(r/2) THEN | |||||
Vowelout len=50 | |||||
FMT(vwl_fr/_r, -30) | |||||
ELIF prevPhW(g) OR prevPhW(k) OR prevPhW(p) THEN | |||||
FMT(vwl_fr/tr, -40) | |||||
ELIF prevPhW(d) OR prevPhW(t) THEN | |||||
FMT(vwl_fr/tr, -30) | |||||
ELIF prevPhW(f) OR prevPhW(v) OR prevPhW(S) THEN | |||||
FMT(vwl_fr/tr, -30) | |||||
ELIF prevPhW(b) THEN | |||||
FMT(vwl_fr/tr, -20) | |||||
IF thisPh(isWordStart) THEN | |||||
length 80 | |||||
FMT(vwl_fr/r) addWav(r3/rx, 25) | |||||
ELIF prevPhW(p) OR prevPhW(k) OR prevPhW(t) OR prevPhW(S) THEN | |||||
ChangePhoneme(r/2) | |||||
ELIF prevPhW(b) OR prevPhW(d) OR prevPhW(g) THEN | |||||
ChangePhoneme(r/2) | |||||
ELIF prevPhW(f) OR prevPhW(v) THEN | |||||
ChangePhoneme(r/2) | |||||
ENDIF | ENDIF | ||||
FMT(vwl_fr/r) | FMT(vwl_fr/r) | ||||
phoneme r2 // silent unless followed by vowel | phoneme r2 // silent unless followed by vowel | ||||
liquid rhotic uvl | |||||
liquid rhotic vel | |||||
starttype #r endtype #r | starttype #r endtype #r | ||||
lengthmod 7 | |||||
Vowelin f1=0 f2=1600 -300 300 f3=-200 80 | |||||
Vowelout f1=2 f2=1600 -300 300 f3=-300 80 | |||||
Vowelin f1=0 f2=1200 -500 500 f3=-200 100 len=65 | |||||
Vowelout f1=0 f2=1200 -500 500 f3=200 100 len=50 | |||||
lengthmod 2 | |||||
IF nextPh(isNotVowel) THEN | IF nextPh(isNotVowel) THEN | ||||
ChangePhoneme(NULL) | ChangePhoneme(NULL) | ||||
endphoneme | endphoneme | ||||
phoneme r/2 // variant of [r] when not preceding a vowel | |||||
phoneme r/ // variant of [r] when not preceding a vowel | |||||
liquid rhotic vel | liquid rhotic vel | ||||
starttype #r endtype #r | starttype #r endtype #r | ||||
Vowelout f1=2 f2=1600 -300 300 f3=-300 100 len=40 | |||||
Vowelout f1=0 f2=1150 -500 500 f3=200 100 len=30 | |||||
lengthmod 2 | lengthmod 2 | ||||
PrevVowelEndings | |||||
VowelEnding(vwl_fr/r_@) | |||||
VowelEnding(vwl_fr/r_a) | |||||
VowelEnding(vwl_fr/r_e) | |||||
VowelEnding(vwl_fr/r_i) | |||||
VowelEnding(vwl_fr/r_o) | |||||
VowelEnding(vwl_fr/r_u) | |||||
EndSwitch | |||||
IF prevPh(isVowel) THEN | |||||
IF nextPh(isPause) THEN | |||||
FMT(vwl_fr/r_2) addWav(r3/rx, 20) | |||||
ELSE | |||||
FMT(vwl_fr/r_, -30) addWav(r3/rx, 20) | |||||
ENDIF | |||||
ENDIF | |||||
IF thisPh(isWordEnd) THEN | IF thisPh(isWordEnd) THEN | ||||
IF prevPhW(t) OR prevPhW(p) OR prevPhW(k) THEN | IF prevPhW(t) OR prevPhW(p) OR prevPhW(k) THEN | ||||
FMT(vwl_fr/trr) addWav(r3/rx, 15) | FMT(vwl_fr/trr) addWav(r3/rx, 15) | ||||
ELIF prevPhW(v) THEN | |||||
FMT(vwl_fr/r_, -40) | |||||
ELIF prevPhW(f) THEN | |||||
FMT(vwl_fr/r_, -10) addWav(r3/rx, 15) | |||||
ELIF prevPhW(d) THEN | |||||
FMT(vwl_fr/r_) addWav(r3/rx, 15) | |||||
ELIF prevPh(isNotVowel) THEN | |||||
FMT(vwl_fr/rr) addWav(r3/rx, 15) | |||||
ENDIF | ENDIF | ||||
FMT(vwl_fr/r_) addWav(r3/rx, 15) | |||||
ENDIF | ENDIF | ||||
FMT(vwl_fr/r_) | |||||
IF prevPh(isVowel) THEN | |||||
PrevVowelEndings | |||||
VowelEnding(vwl_fr/r_@) | |||||
VowelEnding(vwl_fr/r_a) | |||||
VowelEnding(vwl_fr/r_e) | |||||
VowelEnding(vwl_fr/r_i) | |||||
VowelEnding(vwl_fr/r_o) | |||||
VowelEnding(vwl_fr/r_u) | |||||
EndSwitch | |||||
ENDIF | |||||
IF nextPhW(n) OR nextPhW(n^) THEN | |||||
FMT(vwl_fr/r_n) addWav(r3/rx, 25) | |||||
ENDIF | |||||
FMT(vwl_fr/r_) addWav(r3/rx, 30) | |||||
endphoneme | |||||
phoneme r/2 | |||||
liquid rhotic | |||||
starttype #r endtype #r | |||||
palatal | |||||
Vowelin f1=0 f2=1200 -500 500 f3=-200 100 len=75 | |||||
CALL pre_post_r | |||||
FMT(vwl_fr/tr) addWav(r3/rx, 25) | |||||
endphoneme | endphoneme | ||||
phoneme l | phoneme l | ||||
liquid | |||||
liquid nopause | |||||
starttype #l endtype #l | starttype #l endtype #l | ||||
lengthmod 7 | lengthmod 7 | ||||
ENDIF | ENDIF | ||||
IF prevPh(isPause) OR thisPh(isWordStart) THEN | IF prevPh(isPause) OR thisPh(isWordStart) THEN | ||||
VowelEnding(NULL) | |||||
FMT(l/_l) | FMT(l/_l) | ||||
ENDIF | ENDIF | ||||
IF prevPh(r/2) THEN | |||||
IF prevPh(isRhotic) THEN | |||||
FMT(l/_l) | FMT(l/_l) | ||||
ENDIF | ENDIF | ||||
endphoneme | endphoneme | ||||
phoneme @2 | |||||
vowel starttype #@ endtype #@ | |||||
length 160 | |||||
FMT(vowel/@_fr) | |||||
endphoneme | |||||
phoneme a | phoneme a | ||||
vowel starttype #a endtype #a | vowel starttype #a endtype #a | ||||
length 170 | |||||
IF prevPh(l) THEN | |||||
VowelStart(l/la, -15) | |||||
ENDIF | |||||
IF prevPhW(w) OR prevPhW(w/) THEN | |||||
FMT(vowel/a_5) | |||||
IF nextPh(isVowel) THEN | |||||
length 220 | |||||
ELSE | |||||
length 170 | |||||
ENDIF | ENDIF | ||||
FMT(vowel/a_6) | |||||
FMT(vowel/a_7) | |||||
endphoneme | endphoneme | ||||
phoneme e | phoneme e | ||||
vowel starttype #e endtype #e | vowel starttype #e endtype #e | ||||
length 170 | |||||
IF nextPh(isVowel) THEN | |||||
length 220 | |||||
ELSE | |||||
length 170 | |||||
ENDIF | |||||
IF nextPh(l/) THEN | IF nextPh(l/) THEN | ||||
VowelEnding(l/xl, -20) | VowelEnding(l/xl, -20) | ||||
vowel starttype #e endtype #e | vowel starttype #e endtype #e | ||||
length 170 | length 170 | ||||
IF nextPh(r/2) THEN | |||||
VowelEnding(vwl_fr/r_e2) | |||||
ENDIF | |||||
IF nextPhW(j) THEN | IF nextPhW(j) THEN | ||||
length 190 | length 190 | ||||
ENDIF | ENDIF | ||||
phoneme i | phoneme i | ||||
vowel starttype #i endtype #i | vowel starttype #i endtype #i | ||||
length 160 | |||||
IfNextVowelAppend(;) | |||||
FMT(vowel/i_2) | |||||
endphoneme | |||||
IF prevPhW(#r) AND nextPhW(isVowel) THEN | |||||
ChangePhoneme(j/) | |||||
ELIF nextPhW(isVowel) THEN | |||||
ChangePhoneme(j) | |||||
ELSE | |||||
length 160 | |||||
ENDIF | |||||
phoneme i- // shorter | |||||
vowel starttype #i endtype #i | |||||
length 110 | |||||
IfNextVowelAppend(;) | |||||
FMT(vowel/i_2) | |||||
FMT(vowel/i_8) | |||||
endphoneme | endphoneme | ||||
endphoneme | endphoneme | ||||
phoneme j/ // Short "i" between "r" and a vowel | |||||
vowel starttype #i endtype #i | |||||
palatal | |||||
IF nextPh(isVowel) THEN | |||||
NextVowelStarts | |||||
VowelStart(j/j@) | |||||
VowelStart(j/ja) | |||||
VowelStart(j/je) | |||||
VowelStart(j/ji) | |||||
VowelStart(j/jo) | |||||
VowelStart(j/ju) | |||||
EndSwitch | |||||
ELSE | |||||
ChangePhoneme(NULL) | |||||
ENDIF | |||||
endphoneme | |||||
phoneme o | phoneme o | ||||
vowel starttype #o endtype #o | vowel starttype #o endtype #o | ||||
length 170 | |||||
IF nextPh(isVowel) THEN | |||||
length 220 | |||||
ELSE | |||||
length 170 | |||||
ENDIF | |||||
IF thisPh(isFinalVowel) THEN | IF thisPh(isFinalVowel) THEN | ||||
IF thisPh(isWordEnd) THEN | IF thisPh(isWordEnd) THEN | ||||
FMT(vowel/o_8) | FMT(vowel/o_8) | ||||
ELIF nextPh(p2) OR nextPh(t2) OR nextPh(z2) THEN | ELIF nextPh(p2) OR nextPh(t2) OR nextPh(z2) THEN | ||||
FMT(vowel/o_8) | FMT(vowel/o_8) | ||||
ELIF nextPh(z) THEN | |||||
FMT(vowel/o) | |||||
ELSE | ELSE | ||||
ChangePhoneme(O) | ChangePhoneme(O) | ||||
ENDIF | ENDIF | ||||
ELSE | ELSE | ||||
IF nextPhW(isLiquid) AND next2Ph(isNotVowel) THEN | IF nextPhW(isLiquid) AND next2Ph(isNotVowel) THEN | ||||
ChangePhoneme(O) | ChangePhoneme(O) | ||||
ELIF nextPhW(isNasal) AND next2Ph(isNotVowel) THEN | |||||
ELIF nextPhW(n) AND next2Ph(j) THEN | |||||
FMT(vowel/o) | |||||
ELIF nextPhW(isNasal) AND next2Ph(isLiquid) THEN | |||||
ChangePhoneme(O) | ChangePhoneme(O) | ||||
ELIF nextPhW(isNotVowel) AND next2Ph(isNasal) THEN | ELIF nextPhW(isNotVowel) AND next2Ph(isNasal) THEN | ||||
ChangePhoneme(O) | ChangePhoneme(O) | ||||
ELIF nextPhW(d) AND next2Ph(isNotVowel) THEN | |||||
ChangePhoneme(O) | |||||
ELIF nextPhW(t) AND next2Ph(isLiquid) AND nextVowel(isFinalVowel) THEN | ELIF nextPhW(t) AND next2Ph(isLiquid) AND nextVowel(isFinalVowel) THEN | ||||
ChangePhoneme(O) | ChangePhoneme(O) | ||||
ELSE | ELSE | ||||
FMT(vowel/o) | FMT(vowel/o) | ||||
ENDIF | ENDIF | ||||
FMT(vowel/o) | |||||
ENDIF | ENDIF | ||||
endphoneme | endphoneme | ||||
phoneme o2 | phoneme o2 | ||||
vowel starttype #o endtype #o | vowel starttype #o endtype #o | ||||
length 170 | |||||
IF nextPh(l/) THEN | |||||
VowelEnding(l/l_o) | |||||
IF nextPh(isVowel) THEN | |||||
length 220 | |||||
ELSE | |||||
length 170 | |||||
ENDIF | ENDIF | ||||
IF thisPh(isFinalVowel) THEN | IF thisPh(isFinalVowel) THEN | ||||
phoneme O | phoneme O | ||||
vowel starttype #o endtype #o | vowel starttype #o endtype #o | ||||
length 180 | |||||
IF prevPhW(#r) THEN | |||||
VowelStart(vwl_fr/ro2) | |||||
IF nextPhW(#r) THEN | |||||
length 200 | |||||
ELSE | |||||
length 170 | |||||
ENDIF | ENDIF | ||||
IF nextPhW(r/2) THEN | |||||
VowelEnding(vwl_fr/r_o2) | |||||
ENDIF | |||||
FMT(vowel/o_mid2) | FMT(vowel/o_mid2) | ||||
endphoneme | endphoneme | ||||
phoneme u | phoneme u | ||||
vowel starttype #u endtype #u | vowel starttype #u endtype #u | ||||
length 180 | |||||
IF nextPh(isVowel) OR nextPh(j) THEN | |||||
length 220 | |||||
ELSE | |||||
length 180 | |||||
ENDIF | |||||
FMT(vowel/u_bck2) | FMT(vowel/u_bck2) | ||||
endphoneme | endphoneme | ||||
phoneme y | phoneme y | ||||
vowel starttype #u endtype #u | vowel starttype #u endtype #u | ||||
length 170 | |||||
IF nextPh(l/) THEN | |||||
VowelEnding(l/l_y, -30) | |||||
ENDIF | |||||
IF prevPh(#r) THEN | |||||
IF thisPh(isFinalVowel) THEN | |||||
VowelStart(vwl_fr/ry, -10) | |||||
ELSE | |||||
VowelStart(vwl_fr/ry) | |||||
ENDIF | |||||
ENDIF | |||||
IF nextPh(r/2) THEN | |||||
VowelEnding(vwl_fr/r_y) | |||||
IF nextPh(isVowel) THEN | |||||
length 200 | |||||
ELSE | |||||
length 170 | |||||
ENDIF | ENDIF | ||||
IF nextPhW(E~) THEN | |||||
FMT(vowel/y_2, -30) | |||||
IF nextPh(l/) THEN | |||||
VowelEnding(l/l_y) | |||||
ELIF nextPhW(E~) THEN | |||||
FMT(vowel/y, -30) | |||||
ENDIF | ENDIF | ||||
FMT(vowel/y_2) | |||||
FMT(vowel/y) | |||||
endphoneme | endphoneme | ||||
vowel starttype #@ endtype #@ | vowel starttype #@ endtype #@ | ||||
length 170 | length 170 | ||||
IF prevPh(l) THEN | |||||
VowelStart(l/l@, -20) | |||||
ENDIF | |||||
IF nextPh(l/) THEN | |||||
VowelEnding(l/l_@, -20) | |||||
ENDIF | |||||
IF thisPh(isFinalVowel) THEN | IF thisPh(isFinalVowel) THEN | ||||
IF thisPh(isWordEnd) THEN | IF thisPh(isWordEnd) THEN | ||||
FMT(vowel/y#) | FMT(vowel/y#) | ||||
phoneme w | phoneme w | ||||
vowel starttype #u endtype #u | vowel starttype #u endtype #u | ||||
IF prevPhW(#r) OR prevPhW(#l) THEN | |||||
IF prevPh(#r) OR prevPhW(#l) THEN | |||||
NextVowelStarts | NextVowelStarts | ||||
VowelStart(w/w@) | VowelStart(w/w@) | ||||
VowelStart(w/wa, -10) | VowelStart(w/wa, -10) | ||||
endphoneme | endphoneme | ||||
phoneme w^a | |||||
vowel starttype #o endtype #a | |||||
length 200 | |||||
FMT(vdiph/oa_fr) | |||||
endphoneme | |||||
phoneme w^i | phoneme w^i | ||||
vowel starttype #u endtype #i | vowel starttype #u endtype #i | ||||
length 240 | length 240 | ||||
IF prevPhW(l) THEN | |||||
VowelStart(l/lu, -20) | |||||
ENDIF | |||||
IF prevPhW(#r) THEN | |||||
VowelStart(vwl_fr/ry) | |||||
ENDIF | |||||
IfNextVowelAppend(;) | |||||
FMT(vdiph/yi_fr) | FMT(vdiph/yi_fr) | ||||
endphoneme | endphoneme | ||||
phoneme A~ | phoneme A~ | ||||
vowel starttype #a endtype #a | vowel starttype #a endtype #a | ||||
length 190 | length 190 | ||||
IF nextPh(r/2) THEN | |||||
VowelEnding(vwl_fr/r_an) | |||||
ENDIF | |||||
IF prevPhW(#r) THEN | |||||
IF thisPh(isFinalVowel) THEN | |||||
VowelStart(vwl_fr/raa, -15) | |||||
ELSE | |||||
VowelStart(vwl_fr/raa, -10) | |||||
ENDIF | |||||
ENDIF | |||||
FMT(vnasal/aa_n4) | FMT(vnasal/aa_n4) | ||||
endphoneme | endphoneme | ||||
FMT(b/xb) | FMT(b/xb) | ||||
ENDIF | ENDIF | ||||
IF nextPh(isPause2) OR nextPh(#l) THEN | |||||
IF nextPh(isPause2) OR nextPh(l) THEN | |||||
FMT(b/b_) addWav(x/b_) | FMT(b/b_) addWav(x/b_) | ||||
ELIF nextPh(l/) THEN | |||||
FMT(b/b) | |||||
ELIF nextPh(#r) THEN | |||||
length 40 | |||||
FMT(b/b) addWav(x/b, 50) | |||||
ENDIF | ENDIF | ||||
FMT(b/b) addWav(x/b, 70) | FMT(b/b) addWav(x/b, 70) | ||||
FMT(d/xd) | FMT(d/xd) | ||||
ENDIF | ENDIF | ||||
IF nextPh(isPause2) OR nextPh(isPause) THEN | |||||
IF nextPh(isPause2) THEN | |||||
FMT(d/d_) addWav(x/d_, 50) | FMT(d/d_) addWav(x/d_, 50) | ||||
ELIF nextPh(#r) THEN | |||||
FMT(d/dr) addWav(x/d, 30) | |||||
ELIF prevPh(isPause) THEN | |||||
FMT(d/d) addWav(x/d, 50) | |||||
ENDIF | ENDIF | ||||
FMT(d/d) addWav(x/d, 40) | FMT(d/d) addWav(x/d, 40) | ||||
IF nextPh(isPause2) THEN | IF nextPh(isPause2) THEN | ||||
FMT(g/g_) addWav(x/g_) | FMT(g/g_) addWav(x/g_) | ||||
ELIF nextPhW(#r) THEN | |||||
FMT(g2/g) addWav(x/g, 20) | |||||
ENDIF | ENDIF | ||||
FMT(g/g) addWav(x/g, 20) | FMT(g/g) addWav(x/g, 20) | ||||
WAV(ustop/ki, 45) | WAV(ustop/ki, 45) | ||||
ELIF nextPh(#l) THEN | ELIF nextPh(#l) THEN | ||||
WAV(ustop/kl, 40) | WAV(ustop/kl, 40) | ||||
ELIF nextPh(#r) THEN | |||||
length 50 | |||||
WAV(ustop/k, 50) | |||||
ENDIF | ENDIF | ||||
WAV(ustop/k, 35) | |||||
WAV(ustop/k, 40) | |||||
endphoneme | endphoneme | ||||
WAV(ustop/p_unasp, 60) | WAV(ustop/p_unasp, 60) | ||||
ELIF nextPh(#l) THEN | ELIF nextPh(#l) THEN | ||||
WAV(ustop/pl, 30) | WAV(ustop/pl, 30) | ||||
ELIF nextPh(#r) THEN | |||||
length 40 | |||||
WAV(ustop/p_, 60) | |||||
ENDIF | ENDIF | ||||
WAV(ustop/p_unasp_, 90) | WAV(ustop/p_unasp_, 90) | ||||
endphoneme | endphoneme | ||||
vls alv stop | vls alv stop | ||||
voicingswitch d | voicingswitch d | ||||
lengthmod 2 | lengthmod 2 | ||||
Vowelin f1=0 f2=1600 -300 300 f3=-100 80 | |||||
Vowelout f1=0 f2=1600 -300 250 f3=-100 80 brk | |||||
Vowelin f1=0 f2=1700 -300 300 f3=-100 80 | |||||
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | |||||
IF nextPh(isPause2) THEN | IF nextPh(isPause2) THEN | ||||
WAV(ustop/t_, 40) | WAV(ustop/t_, 40) | ||||
ELIF nextPh(r/2) THEN | |||||
WAV(ustop/t_short, 50) | |||||
ELIF nextPh(#r) THEN | |||||
length 40 | |||||
WAV(ustop/t_short_, 40) | |||||
ENDIF | ENDIF | ||||
WAV(ustop/t_short, 40) | WAV(ustop/t_short, 40) | ||||
Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 | Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 | ||||
lengthmod 2 | lengthmod 2 | ||||
IF nextPh(isVowel) OR nextPh(w) THEN | |||||
IF nextPh(isVowel) OR nextPh(w) OR nextPh(j) THEN | |||||
WAV(ustop/t_short, 30) | WAV(ustop/t_short, 30) | ||||
ELSE | ELSE | ||||
ChangePhoneme(NULL) | ChangePhoneme(NULL) | ||||
ENDIF | ENDIF | ||||
IF thisPh(isWordStart) AND nextPhW(isLiquid) THEN | IF thisPh(isWordStart) AND nextPhW(isLiquid) THEN | ||||
Length 70 | Length 70 | ||||
ELIF nextPhW(w) THEN | |||||
ELIF nextPhW(w) OR nextPhW(#r) THEN | |||||
Length 50 | Length 50 | ||||
ENDIF | ENDIF | ||||
FMT(voc/v) addWav(vocw/v, 60) | FMT(voc/v) addWav(vocw/v, 60) | ||||
phoneme z2 // silent unless followed by vowel | phoneme z2 // silent unless followed by vowel | ||||
vcd alv frc sibilant | vcd alv frc sibilant | ||||
IF nextPh(isVowel) OR nextPh(w/) THEN | |||||
FMT(voc/z_, -20) addWav(ufric/s_, 40) | |||||
IF nextPh(isVowel) OR nextPh(w/) OR nextPh(j) THEN | |||||
FMT(voc/z, -20) addWav(ufric/s, 40) | |||||
ELSE | ELSE | ||||
ChangePhoneme(NULL) | ChangePhoneme(NULL) | ||||
ENDIF | ENDIF |
vowel starttype #i endtype #i | vowel starttype #i endtype #i | ||||
length 130 | length 130 | ||||
IfNextVowelAppend(;) | IfNextVowelAppend(;) | ||||
FMT(vowel/ii_6) | |||||
endphoneme | |||||
phoneme i: | |||||
vowel starttype #i endtype #i | |||||
length 230 | |||||
IfNextVowelAppend(;) | |||||
ChangeIfNotStressed(i) | |||||
FMT(vowel/i_4) | FMT(vowel/i_4) | ||||
endphoneme | endphoneme | ||||
phoneme I | phoneme I | ||||
vowel starttype #i endtype #i | vowel starttype #i endtype #i | ||||
length 130 | length 130 | ||||
FMT(vowel/ii) | FMT(vowel/ii) | ||||
endphoneme | endphoneme | ||||
phoneme e | |||||
vowel starttype #e endtype #e | |||||
length 130 | |||||
ChangeIfNotStressed(E) | |||||
FMT(vowel/e_e) | |||||
phoneme I: | |||||
vowel starttype #i endtype #i | |||||
length 230 | |||||
IfNextVowelAppend(;) | |||||
ChangeIfNotStressed(I) | |||||
FMT(vowel/ii) | |||||
endphoneme | endphoneme | ||||
phoneme E | phoneme E | ||||
vowel starttype #e endtype #e | vowel starttype #e endtype #e | ||||
length 130 | length 130 | ||||
FMT(vowel/e_mid) | FMT(vowel/e_mid) | ||||
endphoneme | endphoneme | ||||
phoneme a | |||||
vowel starttype #a endtype #a | |||||
phoneme E: | |||||
vowel starttype #e endtype #e | |||||
length 130 | length 130 | ||||
ChangeIfNotStressed(&) | |||||
FMT(vowel/a_3) | |||||
FMT(vowel/e_e) | |||||
endphoneme | endphoneme | ||||
phoneme & | |||||
phoneme a | |||||
vowel starttype #@ endtype #@ | vowel starttype #@ endtype #@ | ||||
length 130 | length 130 | ||||
FMT(vowel/a#_2) | FMT(vowel/a#_2) | ||||
endphoneme | endphoneme | ||||
phoneme o | |||||
vowel starttype #o endtype #o | |||||
length 130 | |||||
ChangeIfNotStressed(O) | |||||
FMT(vdiph2/o_oo) | |||||
phoneme a: | |||||
vowel starttype #a endtype #a | |||||
length 230 | |||||
ChangeIfNotStressed(a) | |||||
FMT(vowel/aa_8) | |||||
endphoneme | endphoneme | ||||
phoneme O | phoneme O | ||||
vowel starttype #o endtype #o | vowel starttype #o endtype #o | ||||
length 130 | length 130 | ||||
FMT(vowel/oo_5) | FMT(vowel/oo_5) | ||||
endphoneme | endphoneme | ||||
phoneme O: | |||||
vowel starttype #o endtype #o | |||||
length 230 | |||||
ChangeIfNotStressed(O) | |||||
FMT(vdiph2/o_oo) | |||||
endphoneme | |||||
phoneme u | phoneme u | ||||
vowel starttype #u endtype #u | vowel starttype #u endtype #u | ||||
length 130 | length 130 | ||||
FMT(vowel/u_2) | |||||
endphoneme | |||||
phoneme u: | |||||
vowel starttype #u endtype #u | |||||
length 230 | |||||
ChangeIfNotStressed(u) | |||||
FMT(vowel/u_bck) | FMT(vowel/u_bck) | ||||
endphoneme | endphoneme | ||||
phoneme y | phoneme y | ||||
vowel starttype #i endtype #i | |||||
vowel starttype #@ endtype #@ | |||||
length 130 | length 130 | ||||
FMT(vowel/y##) | |||||
endphoneme | |||||
phoneme y: | |||||
vowel starttype #i endtype #i | |||||
length 230 | |||||
ChangeIfNotStressed(y) | |||||
FMT(vowel/yy_4) | FMT(vowel/yy_4) | ||||
endphoneme | endphoneme | ||||
phoneme y# | |||||
phoneme W | |||||
vowel starttype #@ endtype #@ | vowel starttype #@ endtype #@ | ||||
length 130 | length 130 | ||||
FMT(vowel/y##) | |||||
FMT(vowel/y#_3) | |||||
endphoneme | endphoneme | ||||
phoneme W | |||||
phoneme W: | |||||
vowel starttype #@ endtype #@ | vowel starttype #@ endtype #@ | ||||
length 130 | length 130 | ||||
ChangeIfNotStressed(W) | |||||
FMT(vowel/y#_3) | FMT(vowel/y#_3) | ||||
endphoneme | endphoneme | ||||
FMT(vdiph/ai_7) | FMT(vdiph/ai_7) | ||||
endphoneme | endphoneme | ||||
phoneme aI: | |||||
vowel starttype #a endtype #i | |||||
length 230 | |||||
ChangeIfNotStressed(aI) | |||||
FMT(vdiph/ai_7) | |||||
endphoneme | |||||
phoneme eI | phoneme eI | ||||
vowel starttype #e endtype #i | vowel starttype #e endtype #i | ||||
length 170 | length 170 | ||||
FMT(vdiph/ei) | FMT(vdiph/ei) | ||||
endphoneme | endphoneme | ||||
phoneme eI: | |||||
vowel starttype #e endtype #i | |||||
length 230 | |||||
ChangeIfNotStressed(eI) | |||||
FMT(vdiph/ei) | |||||
endphoneme | |||||
phoneme aU | phoneme aU | ||||
vowel starttype #a endtype #u | vowel starttype #a endtype #u | ||||
length 170 | length 170 | ||||
FMT(vdiph/au_4) | |||||
FMT(vdiph/aau) | |||||
endphoneme | |||||
phoneme aU: | |||||
vowel starttype #a endtype #u | |||||
length 230 | |||||
ChangeIfNotStressed(aU) | |||||
FMT(vdiph/aau) | |||||
endphoneme | endphoneme | ||||
phoneme oU | phoneme oU | ||||
vowel starttype #o endtype #u | vowel starttype #o endtype #u | ||||
length 170 | length 170 | ||||
FMT(vdiph/ou_3) | FMT(vdiph/ou_3) | ||||
endphoneme | endphoneme | ||||
phoneme oU2 // long version for óf | |||||
phoneme oU: // long version for óf | |||||
vowel starttype #o endtype #u | vowel starttype #o endtype #u | ||||
length 230 | length 230 | ||||
ChangeIfNotStressed(oU) | |||||
FMT(vdiph/ou_3) | FMT(vdiph/ou_3) | ||||
endphoneme | endphoneme | ||||
phoneme Yy | phoneme Yy | ||||
vowel starttype #@ endtype #i | vowel starttype #@ endtype #i | ||||
length 150 | length 150 | ||||
FMT(vdiph/y#i_2) | FMT(vdiph/y#i_2) | ||||
endphoneme | endphoneme | ||||
phoneme Yy: | |||||
vowel starttype #@ endtype #i | |||||
length 220 | |||||
ChangeIfNotStressed(Yy) | |||||
FMT(vdiph/y#i_2) | |||||
endphoneme | |||||
phoneme OI | |||||
vowel starttype #o endtype #i | |||||
length 210 | |||||
FMT(vdiph/oi) | |||||
endphoneme | |||||
phoneme yI | |||||
vowel starttype #i endtype #i | |||||
length 180 | |||||
FMT(vowel/yy_4) | |||||
endphoneme | |||||
// Consonants | // Consonants |
phonemetable prs base | phonemetable prs base | ||||
include ph_dari | include ph_dari | ||||
phonemetable sl sk | |||||
include ph_slovenian | |||||
phonemetable gd base | phonemetable gd base | ||||
include ph_s_gaelic | include ph_s_gaelic | ||||
phonemetable bg pl | |||||
include ph_bulgarian |
const char *mnem; | const char *mnem; | ||||
int value; | int value; | ||||
} MNEM_TAB; | } MNEM_TAB; | ||||
int LookupMnem(MNEM_TAB *table, char *string); | |||||
int LookupMnem(MNEM_TAB *table, const char *string); | |||||
const char *mnem; | const char *mnem; | ||||
int value; | int value; | ||||
} MNEM_TAB; | } MNEM_TAB; | ||||
int LookupMnem(MNEM_TAB *table, char *string); | |||||
int LookupMnem(MNEM_TAB *table, const char *string); | |||||
[Setup] | [Setup] | ||||
AppName=eSpeak | AppName=eSpeak | ||||
AppVerName=eSpeak version 1.42 | |||||
AppVerName=eSpeak version 1.43.24 | |||||
AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details). | AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details). | ||||
WindowVisible=yes | WindowVisible=yes | ||||
UILanguage: Integer; | UILanguage: Integer; | ||||
UIVoice: String; | UIVoice: String; | ||||
Page: TInputQueryWizardPage; | Page: TInputQueryWizardPage; | ||||
voices_installed: array [0..200] of String; | |||||
n_voices_installed: Integer; | |||||
const | const | ||||
sEspeak = 'eSpeak-'; | sEspeak = 'eSpeak-'; | ||||
procedure SetupVoice(Voice: String; Index: Integer); | procedure SetupVoice(Voice: String; Index: Integer); | ||||
var | var | ||||
ix: Integer; | |||||
RegVoice2: String; | RegVoice2: String; | ||||
RegVoice2a: String; | RegVoice2a: String; | ||||
VoiceUC: String; | VoiceUC: String; | ||||
VoiceUC := 'default' | VoiceUC := 'default' | ||||
else | else | ||||
VoiceUC := Uppercase(Voice); | VoiceUC := Uppercase(Voice); | ||||
// check for duplicate voice names | |||||
for ix := 0 to n_voices_installed - 1 do begin | |||||
if voices_installed[ix] = VoiceUC then | |||||
Exit; | |||||
end; | |||||
if n_voices_installed < 200 then begin | |||||
voices_installed[n_voices_installed] := VoiceUC; | |||||
n_voices_installed := n_voices_installed + 1; | |||||
end; | |||||
RegWriteStringValue(HKEY_LOCAL_MACHINE,RegVoice2,'',sEspeak+VoiceUC); | RegWriteStringValue(HKEY_LOCAL_MACHINE,RegVoice2,'',sEspeak+VoiceUC); | ||||
RegWriteStringValue(HKEY_LOCAL_MACHINE,RegVoice2,'CLSID','{BE985C8D-BE32-4A22-AA93-55C16A6D1D91}'); | RegWriteStringValue(HKEY_LOCAL_MACHINE,RegVoice2,'CLSID','{BE985C8D-BE32-4A22-AA93-55C16A6D1D91}'); | ||||
Page.Values[0] := Format('%s',[UIVoice]); | Page.Values[0] := Format('%s',[UIVoice]); | ||||
Page.Values[1] := Format('%s',[voice2]); | Page.Values[1] := Format('%s',[voice2]); | ||||
n_voices_installed := 0; | |||||
end; | end; | ||||
procedure ClearRegistry; | procedure ClearRegistry; |
[Setup] | [Setup] | ||||
AppName=eSpeakEdit | AppName=eSpeakEdit | ||||
AppVerName=eSpeakEdit version 1.42 | |||||
AppVerName=eSpeakEdit version 1.43.24 | |||||
DefaultDirName={pf}\eSpeak | DefaultDirName={pf}\eSpeak | ||||
DefaultGroupName=eSpeak | DefaultGroupName=eSpeak | ||||
OutputBaseFilename=setup_espeakedit | OutputBaseFilename=setup_espeakedit |
const char *mnem; | const char *mnem; | ||||
int value; | int value; | ||||
} MNEM_TAB; | } MNEM_TAB; | ||||
int LookupMnem(MNEM_TAB *table, char *string); | |||||
int LookupMnem(MNEM_TAB *table, const char *string); | |||||
const char *mnem; | const char *mnem; | ||||
int value; | int value; | ||||
} MNEM_TAB; | } MNEM_TAB; | ||||
int LookupMnem(MNEM_TAB *table, char *string); | |||||
int LookupMnem(MNEM_TAB *table, const char *string); | |||||
const char *mnem; | const char *mnem; | ||||
int value; | int value; | ||||
} MNEM_TAB; | } MNEM_TAB; | ||||
int LookupMnem(MNEM_TAB *table, char *string); | |||||
int LookupMnem(MNEM_TAB *table, const char *string); | |||||
espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,100,path_install,1); | espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,100,path_install,1); | ||||
espeak_SetSynthCallback(SynthCallback); | espeak_SetSynthCallback(SynthCallback); | ||||
initialised = 1; | initialised = 1; | ||||
g_voice_name[0] = 0; | |||||
// g_voice_name[0] = 0; | |||||
} | } | ||||
strcpy(g_voice_name, voice_name); | |||||
espeak_SetVoiceByName(g_voice_name); | |||||
return hr; | return hr; | ||||
} /* CTTSEngObj::SetObjectToken */ | } /* CTTSEngObj::SetObjectToken */ |
}; | }; | ||||
enum { | |||||
kTUNE = 1, | |||||
kENDTUNE, | |||||
kTUNE_PREHEAD, | |||||
kTUNE_ONSET, | |||||
kTUNE_HEAD, | |||||
kTUNE_HEADEXTEND, | |||||
kTUNE_HEADLAST, | |||||
kTUNE_UNSTRESSED, | |||||
kTUNE_NUCLEUS0, | |||||
kTUNE_NUCLEUS1, | |||||
kTUNE_SPLIT, | |||||
}; | |||||
static keywtab_t k_intonation[] = { | |||||
{"tune", 0, kTUNE}, | |||||
{"endtune", 0, kENDTUNE}, | |||||
{"prehead", 0, kTUNE_PREHEAD}, | |||||
{"onset", 0, kTUNE_ONSET}, | |||||
{"head", 0, kTUNE_HEAD}, | |||||
{"headextend", 0, kTUNE_HEADEXTEND}, | |||||
{"headlast", 0, kTUNE_HEADLAST}, | |||||
{"unstressed",0, kTUNE_UNSTRESSED}, | |||||
{"nucleus0", 0, kTUNE_NUCLEUS0}, | |||||
{"nucleus1", 0, kTUNE_NUCLEUS1}, | |||||
{"split", 0, kTUNE_SPLIT}, | |||||
{NULL, 0, -1} | |||||
}; | |||||
static keywtab_t keywords[] = { | static keywtab_t keywords[] = { | ||||
{"vowel", tPHONEME_TYPE, phVOWEL}, | {"vowel", tPHONEME_TYPE, phVOWEL}, | ||||
{"liquid", tPHONEME_TYPE, phLIQUID}, | {"liquid", tPHONEME_TYPE, phLIQUID}, | ||||
{"rhotic", tPHONEME_FLAG, phRHOTIC}, | {"rhotic", tPHONEME_FLAG, phRHOTIC}, | ||||
{"nonsyllabic",tPHONEME_FLAG, phNONSYLLABIC}, | {"nonsyllabic",tPHONEME_FLAG, phNONSYLLABIC}, | ||||
{"lengthenstop",tPHONEME_FLAG, phLENGTHENSTOP}, | {"lengthenstop",tPHONEME_FLAG, phLENGTHENSTOP}, | ||||
{"nopause", tPHONEME_FLAG, phNOPAUSE}, | |||||
// voiced / unvoiced | // voiced / unvoiced | ||||
{"vcd", tPHONEME_FLAG, phVOICED}, | {"vcd", tPHONEME_FLAG, phVOICED}, | ||||
static keywtab_t *keyword_tabs[] = { | static keywtab_t *keyword_tabs[] = { | ||||
keywords, k_conditions, k_properties }; | |||||
keywords, k_conditions, k_properties, k_intonation }; | |||||
static PHONEME_TAB *phoneme_out; | static PHONEME_TAB *phoneme_out; | ||||
tKEYWORD, | tKEYWORD, | ||||
tCONDITION, | tCONDITION, | ||||
tPROPERTIES, | tPROPERTIES, | ||||
tINTONATION, | |||||
}; | }; | ||||
int item_type; | int item_type; | ||||
static void Error(const char *string) | static void Error(const char *string) | ||||
{//================================== | {//================================== | ||||
error(string,NULL); | |||||
error("%s",string); | |||||
} | } | ||||
static FILE *fopen_log(FILE *f_log, const char *fname,const char *access) | static FILE *fopen_log(FILE *f_log, const char *fname,const char *access) | ||||
} | } | ||||
int CheckNextChar() | |||||
{//================ | |||||
int c; | |||||
while(((c = get_char()) == ' ') || (c == '\t')); | |||||
unget_char(c); | |||||
return(c); | |||||
} // end of CheckNextChar | |||||
static int NextItem(int type) | static int NextItem(int type) | ||||
{//========================== | {//========================== | ||||
int acc; | int acc; | ||||
p++; | p++; | ||||
} | } | ||||
if(!isdigit(*p)) | if(!isdigit(*p)) | ||||
error("Expected a number",NULL); | |||||
{ | |||||
if((type == tNUMBER) && (*p == '-')) | |||||
error("Expected an unsigned number",NULL); | |||||
else | |||||
error("Expected a number",NULL); | |||||
} | |||||
while(isdigit(*p)) | while(isdigit(*p)) | ||||
{ | { | ||||
acc *= 10; | acc *= 10; | ||||
} | } | ||||
if((type >= tKEYWORD) && (type <= tPROPERTIES)) | |||||
if((type >= tKEYWORD) && (type <= tINTONATION)) | |||||
{ | { | ||||
pk = keyword_tabs[type-tKEYWORD]; | pk = keyword_tabs[type-tKEYWORD]; | ||||
while(pk->mnem != NULL) | while(pk->mnem != NULL) | ||||
} // end of CompilePhonemeFiles | } // end of CompilePhonemeFiles | ||||
static void CompilePhonemeData2(const char *source) | static void CompilePhonemeData2(const char *source) | ||||
{//================================================ | {//================================================ | ||||
char fname[sizeof(path_source)+40]; | char fname[sizeof(path_source)+40]; | ||||
if(gui_flag) | if(gui_flag) | ||||
{ | { | ||||
progress = new wxProgressDialog(_T("Phonemes"),_T(""),progress_max); | |||||
progress = new wxProgressDialog(_T("Compiling"),_T(""),progress_max); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
static const TUNE default_tune = { | |||||
0, {0,0,0,0}, | |||||
{0, 40, 24, 8, 0, 0, 0, 0}, | |||||
46, 57, 255, 78, 50, 255, | |||||
PITCHfall, 0, | |||||
3, 5, | |||||
7, 7, 0, | |||||
PITCHfall, 64, 8, | |||||
PITCHfall, 70, 18, 24, 12, | |||||
PITCHfall, 70, 18, 24, 12, | |||||
{0,0,0,0,0,0,0,0,0,0} | |||||
}; | |||||
TUNE new_tune; | |||||
#define N_TUNE_NAMES 100 | |||||
static MNEM_TAB envelope_names[] = { | |||||
{"fall", 0}, | |||||
{"rise", 1}, | |||||
{"fall_rise", 2}, | |||||
{"fall_rise2", 3}, | |||||
{"rise_fall", 4}, | |||||
{NULL, -1} }; | |||||
// env_fallrise3, env_fallrise3, | |||||
// env_fallrise4, env_fallrise4, | |||||
// env_fall2, env_fall2, | |||||
// env_rise2, env_rise2, | |||||
// env_risefallrise, env_risefallrise | |||||
int LookupEnvelope(const char *name) | |||||
{//================================= | |||||
return(LookupMnem(envelope_names, name)); | |||||
} | |||||
void CompileIntonation() | |||||
{//===================== | |||||
int ix; | |||||
char *p; | |||||
char c; | |||||
int keyword; | |||||
int compiling_tune = 0; | |||||
int n_tune_names = 0; | |||||
int done_split; | |||||
int n_tunes = 0; | |||||
FILE *f_out; | |||||
wxString report; | |||||
char name[5]; | |||||
unsigned int tune_names[N_TUNE_NAMES]; | |||||
char buf[sizeof(path_source)+120]; | |||||
error_count = 0; | |||||
sprintf(buf,"%s%s",path_source,"error_intonation"); | |||||
if((f_errors = fopen(buf,"w")) == NULL) | |||||
f_errors = stderr; | |||||
sprintf(buf,"%sintonation",path_source); | |||||
f_in = fopen_log(f_errors, buf, "r"); | |||||
if(f_in == NULL) | |||||
{ | |||||
fclose(f_errors); | |||||
return; | |||||
} | |||||
sprintf(buf,"%s/intonations",path_home); | |||||
f_out = fopen_log(f_errors, buf, "w"); | |||||
if(f_out == NULL) | |||||
{ | |||||
fclose(f_in); | |||||
fclose(f_errors); | |||||
return; | |||||
} | |||||
// make a list of the tune names | |||||
while(!feof(f_in)) | |||||
{ | |||||
if(fgets(buf,sizeof(buf),f_in) == NULL) | |||||
break; | |||||
if((memcmp(buf,"tune",4)==0) && isspace(buf[4])) | |||||
{ | |||||
p = &buf[5]; | |||||
while(isspace(*p)) p++; | |||||
ix = 0; | |||||
while((ix < int(sizeof(name) - 1)) && !isspace(*p)) | |||||
{ | |||||
name[ix++] = *p++; | |||||
} | |||||
name[ix] = 0; | |||||
tune_names[n_tune_names++] = StringToWord(name); | |||||
if(n_tune_names >= N_TUNE_NAMES) | |||||
break; | |||||
} | |||||
} | |||||
rewind(f_in); | |||||
linenum = 1; | |||||
while(!feof(f_in)) | |||||
{ | |||||
keyword = NextItem(tINTONATION); | |||||
switch(keyword) | |||||
{ | |||||
case kTUNE: | |||||
if(compiling_tune) | |||||
{ | |||||
} | |||||
compiling_tune = 1; | |||||
n_tunes++; | |||||
done_split = 0; | |||||
memcpy(&new_tune, &default_tune, sizeof(TUNE)); | |||||
NextItem(tSTRING); | |||||
new_tune.name = StringToWord(item_string); | |||||
fprintf(f_errors,"tune %s\n",WordToString(new_tune.name)); | |||||
break; | |||||
case kENDTUNE: | |||||
compiling_tune = 0; | |||||
fwrite(&new_tune, 1, sizeof(new_tune), f_out); | |||||
break; | |||||
case kTUNE_PREHEAD: | |||||
new_tune.prehead_start = NextItem(tNUMBER); | |||||
new_tune.prehead_end = NextItem(tNUMBER); | |||||
break; | |||||
case kTUNE_HEAD: | |||||
new_tune.head_max_steps = NextItem(tNUMBER); | |||||
new_tune.head_start = NextItem(tNUMBER); | |||||
new_tune.head_end = NextItem(tNUMBER); | |||||
NextItem(tSTRING); | |||||
if((ix = LookupEnvelope(item_string)) < 0) | |||||
{ | |||||
error("Bad envelope name: '%s'",item_string); | |||||
} | |||||
break; | |||||
case kTUNE_HEADEXTEND: | |||||
// up to 8 numbers | |||||
for(ix=0; ix < int(sizeof(new_tune.headextend)); ix++) | |||||
{ | |||||
if(!isdigit(c = CheckNextChar()) && (c != '-')) | |||||
break; | |||||
new_tune.headextend[ix] = (NextItem(tSIGNEDNUMBER) * 64) / 100; // convert from percentage to 64ths | |||||
} | |||||
new_tune.n_headextend = ix; // number of values | |||||
break; | |||||
case kTUNE_UNSTRESSED: | |||||
new_tune.unstressed_start = NextItem(tSIGNEDNUMBER); | |||||
new_tune.unstressed_end = NextItem(tSIGNEDNUMBER); | |||||
break; | |||||
case kTUNE_NUCLEUS0: | |||||
NextItem(tSTRING); | |||||
if((ix = LookupEnvelope(item_string)) < 0) | |||||
{ | |||||
error("Bad envelope name: '%s'",item_string); | |||||
break; | |||||
} | |||||
new_tune.nucleus0_env = ix; | |||||
new_tune.nucleus0_max = NextItem(tNUMBER); | |||||
new_tune.nucleus0_min = NextItem(tNUMBER); | |||||
break; | |||||
case kTUNE_NUCLEUS1: | |||||
NextItem(tSTRING); | |||||
if((ix = LookupEnvelope(item_string)) < 0) | |||||
{ | |||||
error("Bad envelope name: '%s'",item_string); | |||||
break; | |||||
} | |||||
new_tune.nucleus1_env = ix; | |||||
new_tune.nucleus1_max = NextItem(tNUMBER); | |||||
new_tune.nucleus1_min = NextItem(tNUMBER); | |||||
new_tune.tail_start = NextItem(tNUMBER); | |||||
new_tune.tail_end = NextItem(tNUMBER); | |||||
if(!done_split) | |||||
{ | |||||
new_tune.split_nucleus_env = ix; | |||||
new_tune.split_nucleus_max = new_tune.nucleus1_max; | |||||
new_tune.split_nucleus_min = new_tune.nucleus1_min; | |||||
new_tune.split_tail_start = new_tune.tail_start; | |||||
new_tune.split_tail_end = new_tune.tail_end; | |||||
} | |||||
break; | |||||
case kTUNE_SPLIT: | |||||
NextItem(tSTRING); | |||||
if((ix = LookupEnvelope(item_string)) < 0) | |||||
{ | |||||
error("Bad envelope name: '%s'",item_string); | |||||
break; | |||||
} | |||||
new_tune.split_nucleus_env = ix; | |||||
new_tune.split_nucleus_max = NextItem(tNUMBER); | |||||
new_tune.split_nucleus_min = NextItem(tNUMBER); | |||||
new_tune.split_tail_start = NextItem(tNUMBER); | |||||
new_tune.split_tail_end = NextItem(tNUMBER); | |||||
done_split = 1; | |||||
break; | |||||
default: | |||||
error("Unexpected: '%s'",item_string); | |||||
break; | |||||
} | |||||
} | |||||
fclose(f_in); | |||||
fclose(f_out); | |||||
fclose(f_errors); | |||||
report.Printf(_T("Compiled %d intonation tunes: %d errors."),n_tunes, error_count); | |||||
wxLogStatus(report); | |||||
} // end of CompileIntonation | |||||
void CompilePhonemeData() | void CompilePhonemeData() | ||||
{ | { | ||||
CompilePhonemeData2("phonemes"); | CompilePhonemeData2("phonemes"); |
static int linenum; | static int linenum; | ||||
static int error_count; | static int error_count; | ||||
static int transpose_offset; // transpose character range for LookupDictList() | |||||
static int transpose_min; | |||||
static int transpose_max; | |||||
static int text_mode = 0; | static int text_mode = 0; | ||||
static int debug_flag = 0; | static int debug_flag = 0; | ||||
static int error_need_dictionary = 0; | static int error_need_dictionary = 0; | ||||
static char *hash_chains[N_HASH_DICT]; | static char *hash_chains[N_HASH_DICT]; | ||||
static char letterGroupsDefined[N_LETTER_GROUPS]; | static char letterGroupsDefined[N_LETTER_GROUPS]; | ||||
MNEM_TAB mnem_rules[] = { | |||||
{"w_alt2", 0x12}, | |||||
{"w_alt3", 0x13}, | |||||
{"w_alt", 0x11}, // note: put longer names before their sub-strings | |||||
{"p_alt2", 0x22}, | |||||
{"p_alt3", 0x23}, | |||||
{"p_alt", 0x21}, | |||||
{NULL, -1} }; | |||||
MNEM_TAB mnem_flags[] = { | MNEM_TAB mnem_flags[] = { | ||||
// these in the first group put a value in bits0-3 of dictionary_flags | // these in the first group put a value in bits0-3 of dictionary_flags | ||||
{"$1", 0x41}, // stress on 1st syllable | {"$1", 0x41}, // stress on 1st syllable | ||||
// language specific | // language specific | ||||
{"$double", 19}, // IT double the initial consonant of next word | {"$double", 19}, // IT double the initial consonant of next word | ||||
{"$alt", 20}, // use alternative pronunciation | {"$alt", 20}, // use alternative pronunciation | ||||
{"$alt1", 20}, // synonym for $alt | |||||
{"$alt2", 21}, | {"$alt2", 21}, | ||||
{"$combine", 22}, // Combine with the next word | |||||
{"$alt3", 23}, | |||||
{"$alt3", 22}, | |||||
{"$combine", 23}, // Combine with the next word | |||||
{"$dot", 24}, // ignore '.' after this word (abbreviation) | {"$dot", 24}, // ignore '.' after this word (abbreviation) | ||||
{"$hasdot", 25}, // use this pronunciation if there is a dot after the word | {"$hasdot", 25}, // use this pronunciation if there is a dot after the word | ||||
{"$capital", 0x29}, /* use this pronunciation if initial letter is upper case */ | {"$capital", 0x29}, /* use this pronunciation if initial letter is upper case */ | ||||
{"$allcaps", 0x2a}, /* use this pronunciation if initial letter is upper case */ | {"$allcaps", 0x2a}, /* use this pronunciation if initial letter is upper case */ | ||||
{"$accent", 0x2b}, // character name is base-character name + accent name | {"$accent", 0x2b}, // character name is base-character name + accent name | ||||
{"$sentence",0x2d}, // only if this clause is a sentence (i.e. terminator is {. ? !} not {, ; :} | |||||
// doesn't set dictionary_flags | // doesn't set dictionary_flags | ||||
{"$?", 100}, // conditional rule, followed by byte giving the condition number | {"$?", 100}, // conditional rule, followed by byte giving the condition number | ||||
} | } | ||||
static const char *LookupMnem2(MNEM_TAB *table, int value) | |||||
{//======================================================= | |||||
while(table->mnem != NULL) | |||||
{ | |||||
if(table->value == value) | |||||
return(table->mnem); | |||||
table++; | |||||
} | |||||
return(""); | |||||
} | |||||
char *print_dictionary_flags(unsigned int *flags) | |||||
{//============================================== | |||||
static char buf[20]; | |||||
sprintf(buf,"%s 0x%x/%x",LookupMnem2(mnem_flags,(flags[0] & 0xf)+0x40), flags[0], flags[1]); | |||||
return(buf); | |||||
} | |||||
static FILE *fopen_log(const char *fname,const char *access) | static FILE *fopen_log(const char *fname,const char *access) | ||||
{//================================================== | {//================================================== | ||||
} | } | ||||
#ifdef OPT_FORMAT | |||||
static const char *lookup_mnem(MNEM_TAB *table, int value) | |||||
//======================================================== | |||||
const char *LookupMnemName(MNEM_TAB *table, const int value) | |||||
//========================================================== | |||||
/* Lookup a mnemonic string in a table, return its name */ | /* Lookup a mnemonic string in a table, return its name */ | ||||
{ | { | ||||
while(table->mnem != NULL) | while(table->mnem != NULL) | ||||
return(table->mnem); | return(table->mnem); | ||||
table++; | table++; | ||||
} | } | ||||
return("??"); /* not found */ | |||||
} /* end of mnem */ | |||||
#endif | |||||
return(""); /* not found */ | |||||
} /* end of LookupMnemValue */ | |||||
char *print_dictionary_flags(unsigned int *flags) | |||||
{//============================================== | |||||
static char buf[20]; | |||||
sprintf(buf,"%s 0x%x/%x",LookupMnemName(mnem_flags,(flags[0] & 0xf)+0x40), flags[0], flags[1]); | |||||
return(buf); | |||||
} | |||||
char *DecodeRule(const char *group_chars, int group_length, char *rule) | |||||
{//==================================================================== | |||||
/* Convert compiled match template to ascii */ | |||||
unsigned char rb; | |||||
unsigned char c; | |||||
char *p; | |||||
int ix; | |||||
int match_type; | |||||
int finished=0; | |||||
int value; | |||||
int linenum=0; | |||||
int flags; | |||||
int suffix_char; | |||||
int condition_num=0; | |||||
const char *name; | |||||
char buf[60]; | |||||
char buf_pre[60]; | |||||
char suffix[20]; | |||||
static char output[60]; | |||||
static char symbols[] = {' ',' ',' ',' ',' ',' ',' ',' ',' ', | |||||
'@','&','%','+','#','S','D','Z','A','L','!',' ','?','?','J','N','K','V','?','T','X','?','W'}; | |||||
static char symbols_lg[] = {'A','B','C','H','F','G','Y'}; | |||||
match_type = 0; | |||||
buf_pre[0] = 0; | |||||
for(ix=0; ix<group_length; ix++) | |||||
{ | |||||
buf[ix] = group_chars[ix]; | |||||
} | |||||
buf[ix] = 0; | |||||
p = &buf[strlen(buf)]; | |||||
while(!finished) | |||||
{ | |||||
rb = *rule++; | |||||
if(rb <= RULE_LINENUM) | |||||
{ | |||||
switch(rb) | |||||
{ | |||||
case 0: | |||||
case RULE_PHONEMES: | |||||
finished=1; | |||||
break; | |||||
case RULE_PRE: | |||||
match_type = RULE_PRE; | |||||
*p = 0; | |||||
p = buf_pre; | |||||
break; | |||||
case RULE_POST: | |||||
match_type = RULE_POST; | |||||
*p = 0; | |||||
strcat(buf," ("); | |||||
p = &buf[strlen(buf)]; | |||||
break; | |||||
case RULE_PH_COMMON: | |||||
break; | |||||
case RULE_CONDITION: | |||||
/* conditional rule, next byte gives condition number */ | |||||
condition_num = *rule++; | |||||
break; | |||||
case RULE_LINENUM: | |||||
value = (rule[1] & 0xff) - 1; | |||||
linenum = (rule[0] & 0xff) - 1 + (value * 255); | |||||
rule+=2; | |||||
break; | |||||
} | |||||
continue; | |||||
} | |||||
if(rb == RULE_DOLLAR) | |||||
{ | |||||
p[0] = '$'; | |||||
name = LookupMnemName(mnem_rules, *rule++); | |||||
strcpy(&p[1],name); | |||||
p += (strlen(name)+1); | |||||
c = ' '; | |||||
} | |||||
else | |||||
if(rb == RULE_ENDING) | |||||
{ | |||||
static const char *flag_chars = "ei vtfq t"; | |||||
flags = ((rule[0] & 0x7f)<< 8) + (rule[1] & 0x7f); | |||||
suffix_char = 'S'; | |||||
if(flags & (SUFX_P >> 8)) | |||||
suffix_char = 'P'; | |||||
sprintf(suffix,"%c%d",suffix_char,rule[2] & 0x7f); | |||||
rule += 3; | |||||
for(ix=0;ix<9;ix++) | |||||
{ | |||||
if(flags & 1) | |||||
sprintf(&suffix[strlen(suffix)],"%c",flag_chars[ix]); | |||||
flags = (flags >> 1); | |||||
} | |||||
strcpy(p,suffix); | |||||
p += strlen(suffix); | |||||
c = ' '; | |||||
} | |||||
else | |||||
if(rb == RULE_LETTERGP) | |||||
{ | |||||
c = symbols_lg[*rule++ - 'A']; | |||||
} | |||||
else | |||||
if(rb == RULE_LETTERGP2) | |||||
{ | |||||
value = *rule++ - 'A'; | |||||
p[0] = 'L'; | |||||
p[1] = (value / 10) + '0'; | |||||
c = (value % 10) + '0'; | |||||
if(match_type == RULE_PRE) | |||||
{ | |||||
p[0] = c; | |||||
c = 'L'; | |||||
} | |||||
p+=2; | |||||
} | |||||
else | |||||
if(rb <= RULE_LAST_RULE) | |||||
c = symbols[rb]; | |||||
else | |||||
if(rb == RULE_SPACE) | |||||
c = '_'; | |||||
else | |||||
c = rb; | |||||
*p++ = c; | |||||
} | |||||
*p = 0; | |||||
p = output; | |||||
if(linenum > 0) | |||||
{ | |||||
sprintf(p,"%5d:\t",linenum); | |||||
p += 7; | |||||
} | |||||
if(condition_num > 0) | |||||
{ | |||||
sprintf(p,"?%d ",condition_num); | |||||
p = &p[strlen(p)]; | |||||
} | |||||
if((ix = strlen(buf_pre)) > 0) | |||||
{ | |||||
while(--ix >= 0) | |||||
*p++ = buf_pre[ix]; | |||||
*p++ = ')'; | |||||
*p++ = ' '; | |||||
} | |||||
*p = 0; | |||||
strcat(p,buf); | |||||
ix = strlen(output); | |||||
while(ix < 8) | |||||
output[ix++]=' '; | |||||
output[ix]=0; | |||||
return(output); | |||||
} /* end of DecodeRule */ | |||||
len_word = strlen(word); | len_word = strlen(word); | ||||
if(transpose_offset > 0) | |||||
if(translator->transpose_offset > 0) | |||||
{ | { | ||||
len_word = TransposeAlphabet(word, transpose_offset, transpose_min, transpose_max); | |||||
len_word = TransposeAlphabet(word, translator->transpose_offset, translator->transpose_min, translator->transpose_max); | |||||
} | } | ||||
*hash = HashDictionary(word); | *hash = HashDictionary(word); | ||||
int sxflags; | int sxflags; | ||||
int value; | int value; | ||||
int literal; | int literal; | ||||
MNEM_TAB *mr; | |||||
if(string[0] == 0) return; | if(string[0] == 0) return; | ||||
c = RULE_CAPITAL; | c = RULE_CAPITAL; | ||||
break; | break; | ||||
case 'T': | case 'T': | ||||
c = RULE_ALT1; | |||||
output[ix++] = RULE_DOLLAR; | |||||
c = 0x11; | |||||
break; | break; | ||||
case 'W': | case 'W': | ||||
c = RULE_SPELLING; | c = RULE_SPELLING; | ||||
} | } | ||||
break; | break; | ||||
case '$': // obsolete, replaced by S | |||||
fprintf(f_log,"%5d: $ now not allowed, use S for suffix",linenum); | |||||
case '$': | |||||
output[ix++] = RULE_DOLLAR; | |||||
c = 0; | |||||
mr = mnem_rules; | |||||
while(mr->mnem != NULL) | |||||
{ | |||||
len = strlen(mr->mnem); | |||||
if(memcmp(p, mr->mnem, len) == 0) | |||||
{ | |||||
c = mr->value; | |||||
p += len; | |||||
break; | |||||
} | |||||
mr++; | |||||
} | |||||
if(c == 0) | |||||
{ | |||||
fprintf(f_log,"%5d: $ command not recognized\n",linenum); | |||||
error_count++; | error_count++; | ||||
} | |||||
break; | break; | ||||
case 'P': | case 'P': | ||||
sxflags |= SUFX_P; // Prefix, now drop through to Suffix | sxflags |= SUFX_P; // Prefix, now drop through to Suffix | ||||
case 'S': | case 'S': | ||||
} | } | ||||
sprintf(fname_temp,"%s%ctemp",path_home,PATHSEP); | sprintf(fname_temp,"%s%ctemp",path_home,PATHSEP); | ||||
transpose_offset = 0; | |||||
if(strcmp(dict_name,"ru") == 0) | |||||
{ | |||||
// transpose cyrillic alphabet from unicode to iso8859-5 | |||||
// transpose_offset = 0x430-0xd0; | |||||
transpose_offset = 0x42f; // range 0x01 to 0x22 | |||||
transpose_min = 0x430; | |||||
transpose_max = 0x451; | |||||
} | |||||
value = N_HASH_DICT; | value = N_HASH_DICT; | ||||
Write4Bytes(f_out,value); | Write4Bytes(f_out,value); | ||||
Write4Bytes(f_out,offset_rules); | Write4Bytes(f_out,offset_rules); |
***************************************************************************/ | ***************************************************************************/ | ||||
#include "StdAfx.h" | #include "StdAfx.h" | ||||
#define LOG_TRANSLATE | |||||
#include <stdio.h> | #include <stdio.h> | ||||
#include <ctype.h> | #include <ctype.h> | ||||
char dictionary_name[40]; | char dictionary_name[40]; | ||||
extern char *print_dictionary_flags(unsigned int *flags); | extern char *print_dictionary_flags(unsigned int *flags); | ||||
extern char *DecodeRule(const char *group_chars, int group_length, char *rule); | |||||
// accented characters which indicate (in some languages) the start of a separate syllable | // accented characters which indicate (in some languages) the start of a separate syllable | ||||
//static const unsigned short diereses_list[7] = {L'ä',L'ë',L'ï',L'ö',L'ü',L'ÿ',0}; | //static const unsigned short diereses_list[7] = {L'ä',L'ë',L'ï',L'ö',L'ü',L'ÿ',0}; | ||||
} | } | ||||
int LookupMnem(MNEM_TAB *table, char *string) | |||||
{//========================================== | |||||
int LookupMnem(MNEM_TAB *table, const char *string) | |||||
{//================================================ | |||||
while(table->mnem != NULL) | while(table->mnem != NULL) | ||||
{ | { | ||||
if(strcmp(string,table->mnem)==0) | if(strcmp(string,table->mnem)==0) | ||||
} | } | ||||
//============================================================================================= | //============================================================================================= | ||||
// Read pronunciation rules and pronunciation lookup dictionary | // Read pronunciation rules and pronunciation lookup dictionary | ||||
// | // | ||||
//============================================================================================= | //============================================================================================= | ||||
#ifdef LOG_TRANSLATE | |||||
static char *DecodeRule(const char *group_chars, int group_length, char *rule) | |||||
{//=========================================================================== | |||||
/* Convert compiled match template to ascii */ | |||||
unsigned char rb; | |||||
unsigned char c; | |||||
char *p; | |||||
int ix; | |||||
int match_type; | |||||
int finished=0; | |||||
int value; | |||||
int linenum=0; | |||||
int flags; | |||||
int suffix_char; | |||||
int condition_num=0; | |||||
char buf[60]; | |||||
char buf_pre[60]; | |||||
char suffix[20]; | |||||
static char output[60]; | |||||
static char symbols[] = {' ',' ',' ',' ',' ',' ',' ',' ',' ', | |||||
'@','&','%','+','#','S','D','Z','A','L','!',' ','?','?','J','N','K','V','?','T','X','?','W'}; | |||||
static char symbols_lg[] = {'A','B','C','H','F','G','Y'}; | |||||
match_type = 0; | |||||
buf_pre[0] = 0; | |||||
for(ix=0; ix<group_length; ix++) | |||||
{ | |||||
buf[ix] = group_chars[ix]; | |||||
} | |||||
buf[ix] = 0; | |||||
p = &buf[strlen(buf)]; | |||||
while(!finished) | |||||
{ | |||||
rb = *rule++; | |||||
if(rb <= RULE_LINENUM) | |||||
{ | |||||
switch(rb) | |||||
{ | |||||
case 0: | |||||
case RULE_PHONEMES: | |||||
finished=1; | |||||
break; | |||||
case RULE_PRE: | |||||
match_type = RULE_PRE; | |||||
*p = 0; | |||||
p = buf_pre; | |||||
break; | |||||
case RULE_POST: | |||||
match_type = RULE_POST; | |||||
*p = 0; | |||||
strcat(buf," ("); | |||||
p = &buf[strlen(buf)]; | |||||
break; | |||||
case RULE_PH_COMMON: | |||||
break; | |||||
case RULE_CONDITION: | |||||
/* conditional rule, next byte gives condition number */ | |||||
condition_num = *rule++; | |||||
break; | |||||
case RULE_LINENUM: | |||||
value = (rule[1] & 0xff) - 1; | |||||
linenum = (rule[0] & 0xff) - 1 + (value * 255); | |||||
rule+=2; | |||||
break; | |||||
} | |||||
continue; | |||||
} | |||||
if(rb == RULE_ENDING) | |||||
{ | |||||
static const char *flag_chars = "ei vtfq t"; | |||||
flags = ((rule[0] & 0x7f)<< 8) + (rule[1] & 0x7f); | |||||
suffix_char = 'S'; | |||||
if(flags & (SUFX_P >> 8)) | |||||
suffix_char = 'P'; | |||||
sprintf(suffix,"%c%d",suffix_char,rule[2] & 0x7f); | |||||
rule += 3; | |||||
for(ix=0;ix<9;ix++) | |||||
{ | |||||
if(flags & 1) | |||||
sprintf(&suffix[strlen(suffix)],"%c",flag_chars[ix]); | |||||
flags = (flags >> 1); | |||||
} | |||||
strcpy(p,suffix); | |||||
p += strlen(suffix); | |||||
c = ' '; | |||||
} | |||||
else | |||||
if(rb == RULE_LETTERGP) | |||||
{ | |||||
c = symbols_lg[*rule++ - 'A']; | |||||
} | |||||
else | |||||
if(rb == RULE_LETTERGP2) | |||||
{ | |||||
value = *rule++ - 'A'; | |||||
p[0] = 'L'; | |||||
p[1] = (value / 10) + '0'; | |||||
c = (value % 10) + '0'; | |||||
if(match_type == RULE_PRE) | |||||
{ | |||||
p[0] = c; | |||||
c = 'L'; | |||||
} | |||||
p+=2; | |||||
} | |||||
else | |||||
if(rb <= RULE_LAST_RULE) | |||||
c = symbols[rb]; | |||||
else | |||||
if(rb == RULE_SPACE) | |||||
c = '_'; | |||||
else | |||||
c = rb; | |||||
*p++ = c; | |||||
} | |||||
*p = 0; | |||||
p = output; | |||||
if(linenum > 0) | |||||
{ | |||||
sprintf(p,"%5d:\t",linenum); | |||||
p += 7; | |||||
} | |||||
if(condition_num > 0) | |||||
{ | |||||
sprintf(p,"?%d ",condition_num); | |||||
p = &p[strlen(p)]; | |||||
} | |||||
if((ix = strlen(buf_pre)) > 0) | |||||
{ | |||||
while(--ix >= 0) | |||||
*p++ = buf_pre[ix]; | |||||
*p++ = ')'; | |||||
*p++ = ' '; | |||||
} | |||||
*p = 0; | |||||
strcat(p,buf); | |||||
ix = strlen(output); | |||||
while(ix < 8) | |||||
output[ix++]=' '; | |||||
output[ix]=0; | |||||
return(output); | |||||
} /* end of decode_match */ | |||||
#endif | |||||
void AppendPhonemes(Translator *tr, char *string, int size, const char *ph) | void AppendPhonemes(Translator *tr, char *string, int size, const char *ph) | ||||
static void MatchRule(Translator *tr, char *word[], int group_length, char *rule, MatchRecord *match_out, int word_flags, int dict_flags) | |||||
{//====================================================================================================================================== | |||||
static void MatchRule(Translator *tr, char *word[], char *word_start, int group_length, char *rule, MatchRecord *match_out, int word_flags, int dict_flags) | |||||
{//======================================================================================================================================================== | |||||
/* Checks a specified word against dictionary rules. | /* Checks a specified word against dictionary rules. | ||||
Returns with phoneme code string, or NULL if no match found. | Returns with phoneme code string, or NULL if no match found. | ||||
char *rule_start; /* start of current match template */ | char *rule_start; /* start of current match template */ | ||||
char *p; | char *p; | ||||
int ix; | |||||
int match_type; /* left, right, or consume */ | int match_type; /* left, right, or consume */ | ||||
int failed; | int failed; | ||||
int lg_pts; | int lg_pts; | ||||
int n_bytes; | int n_bytes; | ||||
int add_points; | int add_points; | ||||
int command; | |||||
MatchRecord match; | MatchRecord match; | ||||
static MatchRecord best; | static MatchRecord best; | ||||
unsigned char condition_num; | unsigned char condition_num; | ||||
char *common_phonemes; /* common to a group of entries */ | char *common_phonemes; /* common to a group of entries */ | ||||
char *group_chars; | char *group_chars; | ||||
char word_buf[N_WORD_BYTES]; | |||||
group_chars = *word; | group_chars = *word; | ||||
failed = 1; | failed = 1; | ||||
break; | break; | ||||
case RULE_ALT1: | |||||
if(dict_flags & FLAG_ALT_TRANS) | |||||
add_points = 1; | |||||
case RULE_DOLLAR: | |||||
command = *rule++; | |||||
if((command & 0xf0) == 0x10) | |||||
{ | |||||
if(dict_flags & (1 << (BITNUM_FLAG_ALT + (command & 0xf)))) | |||||
add_points = 23; | |||||
else | |||||
failed = 1; | |||||
} | |||||
else | else | ||||
failed = 1; | |||||
if((command & 0xf0) == 0x20) | |||||
{ | |||||
// make a copy of the word up to the post-match characters | |||||
ix = *word - word_start + consumed + group_length + 1; | |||||
memcpy(word_buf, word_start-1, ix); | |||||
word_buf[ix] = ' '; | |||||
word_buf[ix+1] = 0; | |||||
if(LookupFlags(tr, &word_buf[1]) & (1 << (BITNUM_FLAG_ALT + (command & 0xf)))) | |||||
add_points = 23; | |||||
else | |||||
failed = 1; | |||||
} | |||||
break; | break; | ||||
case '-': | case '-': | ||||
total_consumed = consumed; | total_consumed = consumed; | ||||
} | } | ||||
#ifdef LOG_TRANSLATE | |||||
if((option_phonemes == 2) && (match.points > 0) && ((word_flags & FLAG_NO_TRACE) == 0)) | if((option_phonemes == 2) && (match.points > 0) && ((word_flags & FLAG_NO_TRACE) == 0)) | ||||
{ | { | ||||
// show each rule that matches, and it's points score | // show each rule that matches, and it's points score | ||||
DecodePhonemes(match.phonemes,decoded_phonemes); | DecodePhonemes(match.phonemes,decoded_phonemes); | ||||
fprintf(f_trans,"%3d\t%s [%s]\n",pts,DecodeRule(group_chars, group_length, rule_start),decoded_phonemes); | fprintf(f_trans,"%3d\t%s [%s]\n",pts,DecodeRule(group_chars, group_length, rule_start),decoded_phonemes); | ||||
} | } | ||||
#endif | |||||
} | } | ||||
while(*rule++ != 0); | while(*rule++ != 0); | ||||
} | } | ||||
#ifdef LOG_TRANSLATE | |||||
if((option_phonemes == 2) && ((word_flags & FLAG_NO_TRACE)==0)) | if((option_phonemes == 2) && ((word_flags & FLAG_NO_TRACE)==0)) | ||||
{ | { | ||||
if(group_length <= 1) | if(group_length <= 1) | ||||
fprintf(f_trans,"\n"); | fprintf(f_trans,"\n"); | ||||
} | } | ||||
#endif | |||||
/* advance input data pointer */ | /* advance input data pointer */ | ||||
total_consumed += group_length; | total_consumed += group_length; | ||||
word_copy[ix] = 0; | word_copy[ix] = 0; | ||||
#ifdef LOG_TRANSLATE | |||||
if((option_phonemes == 2) && ((word_flags & FLAG_NO_TRACE)==0)) | if((option_phonemes == 2) && ((word_flags & FLAG_NO_TRACE)==0)) | ||||
{ | { | ||||
char wordbuf[120]; | char wordbuf[120]; | ||||
wordbuf[ix] = 0; | wordbuf[ix] = 0; | ||||
fprintf(f_trans,"Translate '%s'\n",wordbuf); | fprintf(f_trans,"Translate '%s'\n",wordbuf); | ||||
} | } | ||||
#endif | |||||
p = p_start; | p = p_start; | ||||
tr->word_vowel_count = 0; | tr->word_vowel_count = 0; | ||||
{ | { | ||||
if(tr->groups3[ix] != NULL) | if(tr->groups3[ix] != NULL) | ||||
{ | { | ||||
MatchRule(tr, &p, wc_bytes, tr->groups3[ix], &match1, word_flags, dict_flags0); | |||||
MatchRule(tr, &p, p_start, wc_bytes, tr->groups3[ix], &match1, word_flags, dict_flags0); | |||||
found = 1; | found = 1; | ||||
} | } | ||||
} | } | ||||
found = 1; | found = 1; | ||||
p2 = p; | p2 = p; | ||||
MatchRule(tr, &p2, 2, tr->groups2[g], &match2, word_flags, dict_flags0); | |||||
MatchRule(tr, &p2, p_start, 2, tr->groups2[g], &match2, word_flags, dict_flags0); | |||||
if(match2.points > 0) | if(match2.points > 0) | ||||
match2.points += 35; /* to acount for 2 letters matching */ | match2.points += 35; /* to acount for 2 letters matching */ | ||||
/* now see whether single letter chain gives a better match ? */ | /* now see whether single letter chain gives a better match ? */ | ||||
MatchRule(tr, &p, 1, tr->groups1[c], &match1, word_flags, dict_flags0); | |||||
MatchRule(tr, &p, p_start, 1, tr->groups1[c], &match1, word_flags, dict_flags0); | |||||
if(match2.points >= match1.points) | if(match2.points >= match1.points) | ||||
{ | { | ||||
{ | { | ||||
/* alphabetic, single letter chain */ | /* alphabetic, single letter chain */ | ||||
if(tr->groups1[c] != NULL) | if(tr->groups1[c] != NULL) | ||||
MatchRule(tr, &p, 1, tr->groups1[c], &match1, word_flags, dict_flags0); | |||||
MatchRule(tr, &p, p_start, 1, tr->groups1[c], &match1, word_flags, dict_flags0); | |||||
else | else | ||||
{ | { | ||||
// no group for this letter, use default group | // no group for this letter, use default group | ||||
MatchRule(tr, &p, 0, tr->groups1[0], &match1, word_flags, dict_flags0); | |||||
MatchRule(tr, &p, p_start, 0, tr->groups1[0], &match1, word_flags, dict_flags0); | |||||
if((match1.points == 0) && ((option_sayas & 0x10) == 0)) | if((match1.points == 0) && ((option_sayas & 0x10) == 0)) | ||||
{ | { | ||||
continue; | continue; | ||||
} | } | ||||
if((dictionary_flags2 & FLAG_SENTENCE) && !(tr->clause_terminator & CLAUSE_BIT_SENTENCE)) | |||||
{ | |||||
// only uis this clause is a sentence , i.e. terminator is {. ? !} not {, : :} | |||||
continue; | |||||
} | |||||
if(dictionary_flags2 & FLAG_VERB) | if(dictionary_flags2 & FLAG_VERB) | ||||
{ | { | ||||
// this is a verb-form pronunciation | // this is a verb-form pronunciation | ||||
if(textmode == translator->langopts.textmode) | if(textmode == translator->langopts.textmode) | ||||
{ | { | ||||
// only show this line if the word translates to phonemes, not replacement text | // only show this line if the word translates to phonemes, not replacement text | ||||
fprintf(f_trans,"Found: %s [%s] %s\n",word1,ph_decoded,print_dictionary_flags(flags)); | |||||
if(dictionary_skipwords) | |||||
{ | |||||
// matched more than one word | |||||
memcpy(word_buf,word2,word_end-word2); | |||||
word_buf[word_end-word2-1] = 0; | |||||
fprintf(f_trans,"Found: '%s %s",word1,word_buf); | |||||
} | |||||
else | |||||
{ | |||||
fprintf(f_trans,"Found: '%s",word1); | |||||
} | |||||
fprintf(f_trans,"' [%s] %s\n",ph_decoded,print_dictionary_flags(flags)); | |||||
} | } | ||||
} | } | ||||
return(word_end); | return(word_end); | ||||
if(end_flags & FLAG_SUFX_E_ADDED) | if(end_flags & FLAG_SUFX_E_ADDED) | ||||
{ | { | ||||
utf8_out(tr->langopts.suffix_add_e, &word_end[1]); | utf8_out(tr->langopts.suffix_add_e, &word_end[1]); | ||||
#ifdef LOG_TRANSLATE | |||||
if(option_phonemes == 2) | |||||
{ | |||||
fprintf(f_trans,"add e\n"); | |||||
} | |||||
#endif | |||||
if(option_phonemes == 2) | |||||
{ | |||||
fprintf(f_trans,"add e\n"); | |||||
} | |||||
} | } | ||||
} | } | ||||
extern void init_z(); | extern void init_z(); | ||||
extern void CompilePhonemeData(void); | extern void CompilePhonemeData(void); | ||||
extern void CompileMbrola(); | extern void CompileMbrola(); | ||||
extern void CompileIntonation(); | |||||
extern void InitSpectrumDisplay(); | extern void InitSpectrumDisplay(); | ||||
extern void InitProsodyDisplay(); | extern void InitProsodyDisplay(); | ||||
extern void InitWaveDisplay(); | extern void InitWaveDisplay(); | ||||
EVT_MENU(MENU_FORMAT_DICTIONARY, MyFrame::OnTools) | EVT_MENU(MENU_FORMAT_DICTIONARY, MyFrame::OnTools) | ||||
EVT_MENU(MENU_SORT_DICTIONARY, MyFrame::OnTools) | EVT_MENU(MENU_SORT_DICTIONARY, MyFrame::OnTools) | ||||
EVT_MENU(MENU_COMPILE_MBROLA, MyFrame::OnTools) | EVT_MENU(MENU_COMPILE_MBROLA, MyFrame::OnTools) | ||||
EVT_MENU(MENU_COMPILE_INTONATION, MyFrame::OnTools) | |||||
EVT_MENU(MENU_CLOSE_ALL, MyFrame::OnQuit) | EVT_MENU(MENU_CLOSE_ALL, MyFrame::OnQuit) | ||||
EVT_MENU(MENU_QUIT, MyFrame::OnQuit) | EVT_MENU(MENU_QUIT, MyFrame::OnQuit) | ||||
EVT_MENU(MENU_SPEAK_TRANSLATE, MyFrame::OnSpeak) | EVT_MENU(MENU_SPEAK_TRANSLATE, MyFrame::OnSpeak) | ||||
EVT_MENU(MENU_VOWELCHART2, MyFrame::OnTools) | EVT_MENU(MENU_VOWELCHART2, MyFrame::OnTools) | ||||
EVT_MENU(MENU_VOWELCHART3, MyFrame::OnTools) | EVT_MENU(MENU_VOWELCHART3, MyFrame::OnTools) | ||||
EVT_MENU(MENU_LEXICON_RU, MyFrame::OnTools) | EVT_MENU(MENU_LEXICON_RU, MyFrame::OnTools) | ||||
EVT_MENU(MENU_LEXICON_BG, MyFrame::OnTools) | |||||
EVT_MENU(MENU_LEXICON_DE, MyFrame::OnTools) | EVT_MENU(MENU_LEXICON_DE, MyFrame::OnTools) | ||||
EVT_MENU(MENU_LEXICON_IT, MyFrame::OnTools) | EVT_MENU(MENU_LEXICON_IT, MyFrame::OnTools) | ||||
EVT_MENU(MENU_LEXICON_IT2, MyFrame::OnTools) | EVT_MENU(MENU_LEXICON_IT2, MyFrame::OnTools) | ||||
break; | break; | ||||
case MENU_LEXICON_RU: | case MENU_LEXICON_RU: | ||||
case MENU_LEXICON_BG: | |||||
case MENU_LEXICON_DE: | case MENU_LEXICON_DE: | ||||
case MENU_LEXICON_IT: | case MENU_LEXICON_IT: | ||||
case MENU_LEXICON_IT2: | case MENU_LEXICON_IT2: | ||||
case MENU_COMPILE_MBROLA: | case MENU_COMPILE_MBROLA: | ||||
CompileMbrola(); | CompileMbrola(); | ||||
break; | break; | ||||
case MENU_COMPILE_INTONATION: | |||||
CompileIntonation(); | |||||
break; | |||||
case MENU_COMPILE_DICT_DEBUG: | case MENU_COMPILE_DICT_DEBUG: | ||||
debug_flag =1; // and drop through to next case | debug_flag =1; // and drop through to next case |
#define N_CHARS 34 | #define N_CHARS 34 | ||||
int *p_unicode; | |||||
int unicode[80]; | |||||
#define PH(c1,c2) (c2<<8)+c1 // combine two characters into an integer for phoneme name | #define PH(c1,c2) (c2<<8)+c1 // combine two characters into an integer for phoneme name | ||||
} | } | ||||
void Lexicon_Bg() | |||||
{//============== | |||||
// Bulgarian: compare stress markup in a list of words with lookup using bg_rules | |||||
char *p; | |||||
char *pw; | |||||
char *pw1; | |||||
int cc; | |||||
int vcount; | |||||
int lex_stress; | |||||
int input_length; | |||||
int n_words=0; | |||||
int n_wrong=0; | |||||
int n_out=0; | |||||
int n_stress; | |||||
int max_stress; | |||||
int max_stress_posn; | |||||
int stress_first; | |||||
int done; | |||||
PHONEME_TAB *ph; | |||||
FILE *f_in; | |||||
FILE *f_out; | |||||
FILE *f_log; | |||||
char word[80]; | |||||
char word_in[80]; | |||||
char phonemes[N_WORD_PHONEMES]; | |||||
char buf[200]; | |||||
char fname[sizeof(path_dsource)+20]; | |||||
static unsigned short bg_vowels[] = {0x430, 0x435, 0x438, 0x43e, 0x443, 0x44a, 0x44d, 0x44e, 0x44f, 0x450, 0x451, 0x45d, 0}; | |||||
if(gui_flag == 0) | |||||
return; | |||||
wxString s_fname = wxFileSelector(_T("List of UTF-8 words with Combining Grave Accent U+300 to indicate stress"),path_dir1, | |||||
_T(""),_T(""),_T("*"),wxOPEN); | |||||
if(s_fname.IsEmpty()) | |||||
return; | |||||
strcpy(buf,s_fname.mb_str(wxConvLocal)); | |||||
path_dir1 = wxFileName(s_fname).GetPath(); | |||||
if((f_in = fopen(buf,"r")) == NULL) | |||||
{ | |||||
wxLogError(_T("Can't read file: ") + wxString(buf,wxConvLocal)); | |||||
return; | |||||
} | |||||
input_length = GetFileLength(buf); | |||||
sprintf(fname,"%s%c%s",path_dsource,PATHSEP,"bg_listx_1"); | |||||
if((f_out = fopen(fname,"w")) == NULL) | |||||
{ | |||||
wxLogError(_T("Can't write to: ")+wxString(fname,wxConvLocal)); | |||||
fclose(f_in); | |||||
return; | |||||
} | |||||
sprintf(fname,"%s%c%s",path_dsource,PATHSEP,"bg_log"); | |||||
f_log = fopen(fname,"w"); | |||||
LoadVoice("bg",0); | |||||
progress = new wxProgressDialog(_T("Lexicon"),_T(""),input_length); | |||||
for(;;) | |||||
{ | |||||
if((n_words & 0x3ff) == 0) | |||||
{ | |||||
progress->Update(ftell(f_in)); | |||||
} | |||||
if(fgets(buf,sizeof(buf),f_in) == NULL) | |||||
break; | |||||
if(isspace2(buf[0])) | |||||
continue; | |||||
// convert from UTF-8 to Unicode | |||||
word[0] = 0; | |||||
word[1] = ' '; | |||||
pw = &word[2]; | |||||
pw1 = word_in; | |||||
p = buf; | |||||
while(*p == ' ') p++; | |||||
vcount = 0; | |||||
lex_stress = 0; | |||||
n_stress = 0; | |||||
stress_first = 0; | |||||
// find the marked stress position | |||||
for(;;) | |||||
{ | |||||
p += utf8_in(&cc, p); | |||||
if(iswspace(cc)) | |||||
break; | |||||
if(cc == 0xfeff) | |||||
continue; // ignore UTF-8 indication | |||||
pw1 += utf8_out(cc, pw1); // copy UTF-8 to 'word_in' | |||||
if(lookupwchar(bg_vowels, cc) != 0) | |||||
vcount++; | |||||
if((cc == 0x300) || (cc == 0x450) || (cc == 0x45d)) | |||||
{ | |||||
// combining grave accent, of accented vowel character | |||||
lex_stress = vcount; | |||||
n_stress++; | |||||
if(vcount == 1) | |||||
stress_first = 1; | |||||
if(cc == 0x300) | |||||
continue; // discard combining accent | |||||
if(cc == 0x450) | |||||
cc = 0x435; // remove accent from vowel | |||||
if(cc == 0x45d) | |||||
cc = 0x438; | |||||
} | |||||
pw += utf8_out(cc, pw); // copy UTF-8 to 'word' | |||||
} | |||||
*pw++ = ' '; | |||||
*pw = 0; | |||||
*pw1 = 0; | |||||
// translate | |||||
TranslateWord(translator, &word[2],0, NULL); | |||||
DecodePhonemes(word_phonemes,phonemes); | |||||
// find the stress position in the translation | |||||
max_stress = 0; | |||||
max_stress_posn = -1; | |||||
vcount = 0; | |||||
ph = phoneme_tab[phonPAUSE]; | |||||
for(p=word_phonemes; *p != 0; p++) | |||||
{ | |||||
ph = phoneme_tab[(unsigned int)*p]; | |||||
if(ph == NULL) | |||||
continue; | |||||
if(ph->type == phVOWEL) | |||||
vcount++; | |||||
if(ph->type == phSTRESS) | |||||
{ | |||||
if(ph->std_length > max_stress) | |||||
{ | |||||
max_stress = ph->std_length; | |||||
max_stress_posn = vcount+1; | |||||
} | |||||
} | |||||
} | |||||
done = 0; | |||||
if((lex_stress != max_stress_posn) || (n_stress != 1)) | |||||
{ | |||||
if((vcount > 0) && (lex_stress > 0) && (lex_stress <= 7)) | |||||
{ | |||||
if((n_stress == 2) && (stress_first)) | |||||
{ | |||||
done = 1; | |||||
fprintf(f_out,"%s\t$%d\n",&word[2],lex_stress); | |||||
} | |||||
if(n_stress == 1) | |||||
{ | |||||
done = 1; | |||||
fprintf(f_out,"%s\t$%d\n",&word[2],lex_stress); | |||||
} | |||||
} | |||||
if(done == 0) | |||||
{ | |||||
n_wrong++; | |||||
fprintf(f_out,"%s\t$text %s\n", &word[2], word_in); | |||||
} | |||||
if(done) | |||||
n_out++; | |||||
} | |||||
n_words++; | |||||
} | |||||
fclose(f_in); | |||||
fclose(f_out); | |||||
fclose(f_log); | |||||
delete progress; | |||||
sprintf(buf,"Lexicon: Input %d, Output %d, Failed %d",n_words,n_out,n_wrong); | |||||
wxLogStatus(wxString(buf,wxConvLocal)); | |||||
} // end of Lexicon_Bg | |||||
void Lexicon_Ru() | void Lexicon_Ru() | ||||
{//============== | {//============== | ||||
// compare stress markings in Russian RuLex file with lookup in ru_rules | // compare stress markings in Russian RuLex file with lookup in ru_rules | ||||
int len; | int len; | ||||
int check_root; | int check_root; | ||||
int *p_unicode; | |||||
int unicode[80]; | |||||
char word[80]; | char word[80]; | ||||
char word2[80]; | char word2[80]; | ||||
int counts[20][20][10]; | int counts[20][20][10]; | ||||
case MENU_LEXICON_RU: | case MENU_LEXICON_RU: | ||||
Lexicon_Ru(); | Lexicon_Ru(); | ||||
break; | break; | ||||
case MENU_LEXICON_BG: | |||||
Lexicon_Bg(); | |||||
break; | |||||
case MENU_LEXICON_DE: | case MENU_LEXICON_DE: | ||||
Lexicon_De(); | Lexicon_De(); | ||||
break; | break; |
// EVT_SPINCTRL(T_TIMEFRAME,FormantDlg::OnSpin) | // EVT_SPINCTRL(T_TIMEFRAME,FormantDlg::OnSpin) | ||||
END_EVENT_TABLE() | END_EVENT_TABLE() | ||||
int use_spin_controls=0; | |||||
void FormantDlg::OnCommand(wxCommandEvent& event) | void FormantDlg::OnCommand(wxCommandEvent& event) | ||||
{//============================================= | {//============================================= | ||||
} | } | ||||
y=224; | y=224; | ||||
t_timeframe = new wxSpinCtrl(this,T_TIMEFRAME,_T(""), wxPoint(6,y+0), wxSize(52,24), wxTE_CENTRE,0,500,0,_T("Frame length")); | |||||
if(use_spin_controls) | |||||
{ | |||||
t_timeframe = new wxSpinCtrl(this,T_TIMEFRAME,_T(""), wxPoint(6,y+0), wxSize(52,24), wxTE_CENTRE,0,500,0,_T("Frame length")); | |||||
} | |||||
else | |||||
{ | |||||
tt_timeframe = new wxTextCtrl(this,T_TIMEFRAME,_T(""), wxPoint(6,y+0), wxSize(52,24), wxTE_CENTRE,wxDefaultValidator,_T("Frame length")); | |||||
} | |||||
t_orig_frame = new wxStaticText(this,-1,_T("mS"),wxPoint(61,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,0,_T("Frame amplitude")); | t_ampframe = new wxSpinCtrl(this,T_AMPFRAME,_T(""), wxPoint(104,y+0), wxSize(52,24), wxTE_CENTRE,0,500,0,_T("Frame amplitude")); | ||||
t_lab[3] = new wxStaticText(this,-1,_T("% amp - Frame"),wxPoint(159,y+8)); | t_lab[3] = new wxStaticText(this,-1,_T("% amp - Frame"),wxPoint(159,y+8)); | ||||
return; | return; | ||||
sf = spectseq->frames[frame]; | sf = spectseq->frames[frame]; | ||||
if(use_spin_controls == 0) | |||||
{ | |||||
formantdlg->tt_timeframe->GetValue().ToLong(&num); | |||||
sf->length_adjust = num - spectseq->GetFrameLength(frame,0,NULL); | |||||
} | |||||
for(ix=0; ix < 8; ix++) | for(ix=0; ix < 8; ix++) | ||||
{ | { | ||||
if(ix < 7) | if(ix < 7) | ||||
} | } | ||||
// find the time until the next keyframe | // find the time until the next keyframe | ||||
SetSpinCtrl(t_timeframe,int(spectseq->GetFrameLength(frame,1,&original_mS)+0.5)); // round to nearest integer | |||||
value.Printf(_T("%d"),int(spectseq->GetFrameLength(frame,1,&original_mS)+0.5)); // round to nearest integer | |||||
if(use_spin_controls) | |||||
t_timeframe->SetValue(value); | |||||
else | |||||
tt_timeframe->SetValue(value); | |||||
value.Printf(_T("%d mS"),original_mS); | value.Printf(_T("%d mS"),original_mS); | ||||
t_orig_frame->SetLabel(value); | t_orig_frame->SetLabel(value); | ||||
value.Printf(_T("%3d"),sf->amp_adjust); | value.Printf(_T("%3d"),sf->amp_adjust); |
#include <stdio.h> | #include <stdio.h> | ||||
#include <string.h> | #include <string.h> | ||||
#include <stdlib.h> | |||||
#include <wctype.h> | #include <wctype.h> | ||||
#include "speak_lib.h" | #include "speak_lib.h" | ||||
char env; | char env; | ||||
char flags; //bit 0=pitch rising, bit1=emnphasized, bit2=end of clause | char flags; //bit 0=pitch rising, bit1=emnphasized, bit2=end of clause | ||||
char nextph_type; | char nextph_type; | ||||
short pitch1; | |||||
short pitch2; | |||||
unsigned char pitch1; | |||||
unsigned char pitch2; | |||||
} SYLLABLE; | } SYLLABLE; | ||||
static SYLLABLE *syllable_tab; | static SYLLABLE *syllable_tab; | ||||
#define PITCHfall 0 | #define PITCHfall 0 | ||||
#define PITCHrise 1 | |||||
#define PITCHfrise 2 // and 3 must be for the varient preceded by 'r' | |||||
#define PITCHfrise2 4 // and 5 must be the 'r' variant | |||||
#define PITCHrisefall 6 | |||||
#define PITCHrise 2 | |||||
#define PITCHfrise 4 // and 3 must be for the variant preceded by 'r' | |||||
#define PITCHfrise2 6 // and 5 must be the 'r' variant | |||||
#define PITCHrisefall 8 | |||||
/* 0 fall */ | /* 0 fall */ | ||||
unsigned char env_fall[128] = { | unsigned char env_fall[128] = { | ||||
unsigned char *envelope_data[18] = { | |||||
env_fall, | |||||
env_rise, | |||||
unsigned char *envelope_data[20] = { | |||||
env_fall, env_fall, | |||||
env_rise, env_rise, | |||||
env_frise, env_r_frise, | env_frise, env_r_frise, | ||||
env_frise2, env_r_frise2, | env_frise2, env_r_frise2, | ||||
env_risefall, env_risefall, | env_risefall, env_risefall, | ||||
}; | }; | ||||
/* all pitches given in Hz above pitch_base */ | |||||
/* indexed by stress */ | |||||
static int min_drop[] = {6,7,9,9,20,20,20,25}; | |||||
// pitch change during the main part of the clause | // pitch change during the main part of the clause | ||||
static int drops_0[8] = {0x400,0x400,0x700,0x700,0x700,0xa00,0x1800,0x0e00}; | |||||
//static int drops_1[8] = {0x400,0x400,0x600,0x600,0xc00,0xc00,0x0e00,0x0e00}; | |||||
//static int drops_2[8] = {0x400,0x400,0x600,0x600,-0x800,0xc00,0x0e00,0x0e00}; | |||||
static int drops_0[8] = {9,9,16,16,16,23,55,32}; | |||||
static short oflow[] = {0, 20, 12, 4, 0}; | |||||
static short oflow_emf[] = {5, 26, 16, 10, 5}; | |||||
static short oflow_less[] = {3, 19, 12, 7, 2}; | |||||
// static short oflow_test2[] = {20, 0, 20, 0, 20}; | |||||
// static short back_emf[] = {35, 32, 0}; | |||||
// overflow table values are 64ths of the body pitch range (between body_start and body_end) | |||||
static signed char oflow[] = {0, 40, 24, 8, 0}; | |||||
static signed char oflow_emf[] = {10, 52, 32, 20, 10}; | |||||
static signed char oflow_less[] = {6, 38, 24, 14, 4}; | |||||
#define N_TONE_HEAD_TABLE 13 | #define N_TONE_HEAD_TABLE 13 | ||||
unsigned char body_max_steps; | unsigned char body_max_steps; | ||||
char body_lower_u; | char body_lower_u; | ||||
char n_overflow; | |||||
short *overflow; | |||||
unsigned char n_overflow; | |||||
signed char *overflow; | |||||
} TONE_HEAD; | } TONE_HEAD; | ||||
#define T_EMPH 1 | #define T_EMPH 1 | ||||
static TONE_HEAD tone_head_table[N_TONE_HEAD_TABLE] = { | static TONE_HEAD tone_head_table[N_TONE_HEAD_TABLE] = { | ||||
{20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 0 statement | |||||
{20, 25, 34, 20, drops_0, 3, 3, 5, oflow}, // 1 comma | |||||
{20, 25, 34, 20, drops_0, 3, 3, 5, oflow}, // 2 question | |||||
{20, 25, 39, 22, drops_0, 3, 4, 5, oflow_emf}, // 3 exclamation | |||||
{20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 4 statement, emphatic | |||||
{20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less}, // 5 statement, less intonation | |||||
{20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less}, // 6 comma, less intonation | |||||
{20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less}, // 7 comma, less intonation, less rise | |||||
{20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 8 pitch raises at end of sentence | |||||
{20, 25, 34, 20, drops_0, 3, 3, 5, oflow}, // 9 comma | |||||
{20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 10 question | |||||
{15, 18, 18, 14, drops_0, 3, 3, 5, oflow_less}, // 11 test | |||||
{20, 25, 24, 22, drops_0, 3, 3, 5, oflow_less}, // 12 test | |||||
{46, 57, 78, 50, drops_0, 3, 7, 5, oflow}, // 0 statement | |||||
{46, 57, 78, 46, drops_0, 3, 7, 5, oflow}, // 1 comma | |||||
{46, 57, 78, 46, drops_0, 3, 7, 5, oflow}, // 2 question | |||||
{46, 57, 90, 50, drops_0, 3, 9, 5, oflow_emf}, // 3 exclamation | |||||
{46, 57, 78, 50, drops_0, 3, 7, 5, oflow}, // 4 statement, emphatic | |||||
{46, 57, 74, 55, drops_0, 4, 7, 5, oflow_less}, // 5 statement, less intonation | |||||
{46, 57, 74, 55, drops_0, 4, 7, 5, oflow_less}, // 6 comma, less intonation | |||||
{46, 57, 74, 55, drops_0, 4, 7, 5, oflow_less}, // 7 comma, less intonation, less rise | |||||
{46, 57, 78, 50, drops_0, 3, 7, 5, oflow}, // 8 pitch raises at end of sentence | |||||
{46, 57, 78, 46, drops_0, 3, 7, 5, oflow}, // 9 comma | |||||
{46, 57, 78, 50, drops_0, 3, 7, 5, oflow}, // 10 question | |||||
{34, 41, 41, 32, drops_0, 3, 7, 5, oflow_less}, // 11 test | |||||
{46, 57, 55, 50, drops_0, 3, 7, 5, oflow_less}, // 12 test | |||||
}; | }; | ||||
static TONE_NUCLEUS tone_nucleus_table[N_TONE_NUCLEUS_TABLE] = { | static TONE_NUCLEUS tone_nucleus_table[N_TONE_NUCLEUS_TABLE] = { | ||||
{PITCHfall, 29, 4, PITCHfall, 31, 8, NULL, 11, 6, 0}, // 0 statement | |||||
{PITCHfrise, 35, 8, PITCHfrise2, 35,10, NULL, 15, 23, 0}, // 1 comma | |||||
{PITCHfrise, 39,10, PITCHfrise2, 36,10, NULL, 15, 28, 0}, // 2 question | |||||
// {PITCHfall, 41, 4, PITCHfall, 41,27, NULL, 16, 4, T_EMPH}, // 3 exclamation | |||||
{PITCHfall, 41, 4, PITCHfall, 41,35, NULL, 35, 4, T_EMPH}, // 3 exclamation | |||||
{PITCHfall, 38, 2, PITCHfall, 42,30, NULL, 15, 5, 0}, // 4 statement, emphatic | |||||
{PITCHfall, 28, 5, PITCHfall, 28, 9, NULL, 12, 7, 0}, // 5 statement, less intonation | |||||
{PITCHfrise, 30, 8, PITCHfrise2, 30,10, NULL, 13, 20, 0}, // 6 comma, less intonation | |||||
{PITCHfrise2, 28, 7, PITCHfall, 29,14, NULL, 14, 8, 0}, // 7 comma, less intonation, less rise | |||||
{PITCHrise, 30,20, PITCHfall, 19,14, NULL, 20, 26, 0}, // 8 pitch raises at end of sentence | |||||
{PITCHfrise, 35,11, PITCHfrise2, 32,10, NULL, 19, 24, 0}, // 9 comma | |||||
{PITCHfrise, 39,15, PITCHfall, 28,14, NULL, 20, 36, 0}, // 10 question | |||||
{PITCHfall, 28, 6, PITCHfall, 28,10, NULL, 12, 6, 0}, // 11 test | |||||
{PITCHfall, 35, 9, PITCHfall, 35,12, NULL, 16, 10, 0}, // 12 test | |||||
{PITCHfall, 64, 8, PITCHfall, 70,18, NULL, 24, 12, 0}, // 0 statement | |||||
{PITCHfrise, 80,18, PITCHfrise2, 78,22, NULL, 34, 52, 0}, // 1 comma | |||||
{PITCHfrise, 88,22, PITCHfrise2, 82,22, NULL, 34, 64, 0}, // 2 question | |||||
{PITCHfall, 92, 8, PITCHfall, 92,80, NULL, 76, 8, T_EMPH}, // 3 exclamation | |||||
{PITCHfall, 86, 4, PITCHfall, 94,66, NULL, 34, 10, 0}, // 4 statement, emphatic | |||||
{PITCHfall, 62,10, PITCHfall, 62,20, NULL, 28, 16, 0}, // 5 statement, less intonation | |||||
{PITCHfrise, 68,18, PITCHfrise2, 68,22, NULL, 30, 44, 0}, // 6 comma, less intonation | |||||
{PITCHfrise2, 64,16, PITCHfall, 66,32, NULL, 32, 18, 0}, // 7 comma, less intonation, less rise | |||||
{PITCHrise, 68,46, PITCHfall, 42,32, NULL, 46, 58, 0}, // 8 pitch raises at end of sentence | |||||
{PITCHfrise, 78,24, PITCHfrise2, 72,22, NULL, 42, 52, 0}, // 9 comma | |||||
{PITCHfrise, 88,34, PITCHfall, 64,32, NULL, 46, 82, 0}, // 10 question | |||||
{PITCHfall, 56,12, PITCHfall, 56,20, NULL, 24, 12, 0}, // 11 test | |||||
{PITCHfall, 70,18, PITCHfall, 70,24, NULL, 32, 20, 0}, // 12 test | |||||
}; | }; | ||||
/* index by 0=. 1=, 2=?, 3=! 4=none, 5=emphasized */ | /* index by 0=. 1=, 2=?, 3=! 4=none, 5=emphasized */ | ||||
}; | }; | ||||
/* indexed by stress */ | |||||
static int min_drop[] = {0x300,0x300,0x400,0x400,0x900,0x900,0x900,0xb00}; | |||||
int n_tunes = 0; | |||||
TUNE *tunes = NULL; | |||||
#define SECONDARY 3 | #define SECONDARY 3 | ||||
static void set_pitch(SYLLABLE *syl, int base, int drop) | static void set_pitch(SYLLABLE *syl, int base, int drop) | ||||
/******************************************************/ | /******************************************************/ | ||||
// Set the pitch of a vowel in syllable_tab. Base & drop are Hz * 256 | |||||
// Set the pitch of a vowel in syllable_tab | |||||
{ | { | ||||
int pitch1, pitch2; | int pitch1, pitch2; | ||||
int flags = 0; | int flags = 0; | ||||
/* adjust experimentally */ | |||||
int pitch_range2 = 148; | |||||
int pitch_base2 = 72; | |||||
if(base < 0) base = 0; | if(base < 0) base = 0; | ||||
pitch2 = ((base * pitch_range2 ) >> 15) + pitch_base2; | |||||
pitch2 = base; | |||||
if(drop < 0) | if(drop < 0) | ||||
{ | { | ||||
drop = -drop; | drop = -drop; | ||||
} | } | ||||
pitch1 = pitch2 + ((drop * pitch_range2) >> 15); | |||||
pitch1 = pitch2 + drop; | |||||
if(pitch1 < 0) | |||||
pitch1 = 0; | |||||
if(pitch1 > 511) pitch1 = 511; | |||||
if(pitch2 > 511) pitch2 = 511; | |||||
if(pitch1 > 254) pitch1 = 254; | |||||
if(pitch2 > 254) pitch2 = 254; | |||||
syl->pitch1 = pitch1; | syl->pitch1 = pitch1; | ||||
syl->pitch2 = pitch2; | syl->pitch2 = pitch2; | ||||
int initial; | int initial; | ||||
int overflow=0; | int overflow=0; | ||||
int n_overflow; | int n_overflow; | ||||
int pitch_range; | |||||
int pitch_range_abs; | |||||
int *drops; | int *drops; | ||||
short *overflow_tab; | |||||
signed char *overflow_tab; | |||||
SYLLABLE *syl; | SYLLABLE *syl; | ||||
static short continue_tab[5] = {-13, 16, 10, 4, 0}; | |||||
static signed char continue_tab[5] = {-26, 32, 20, 8, 0}; | |||||
drops = th->body_drops; | drops = th->body_drops; | ||||
pitch_range = (th->body_end - th->body_start) << 8; | |||||
pitch_range_abs = abs(pitch_range); | |||||
if(continuing) | if(continuing) | ||||
{ | { | ||||
overflow = 0; | overflow = 0; | ||||
n_overflow = 5; | n_overflow = 5; | ||||
overflow_tab = continue_tab; | overflow_tab = continue_tab; | ||||
increment = (th->body_end - th->body_start) << 8; | |||||
increment = increment / (th->body_max_steps -1); | |||||
increment = pitch_range / (th->body_max_steps -1); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
if(n_steps > 1) | if(n_steps > 1) | ||||
{ | { | ||||
increment = (th->body_end - th->body_start) << 8; | |||||
increment = increment / (n_steps -1); | |||||
increment = pitch_range / (n_steps -1); | |||||
} | } | ||||
else | else | ||||
increment = 0; | increment = 0; | ||||
pitch += increment; | pitch += increment; | ||||
else | else | ||||
{ | { | ||||
pitch = (th->body_end << 8) - (increment * overflow_tab[overflow++])/16; | |||||
pitch = (th->body_end << 8) + (pitch_range_abs * overflow_tab[overflow++])/64; | |||||
if(overflow >= n_overflow) | if(overflow >= n_overflow) | ||||
{ | { | ||||
overflow = 0; | overflow = 0; | ||||
if(stress >= PRIMARY) | if(stress >= PRIMARY) | ||||
{ | { | ||||
syl->stress = PRIMARY_STRESSED; | syl->stress = PRIMARY_STRESSED; | ||||
set_pitch(syl,pitch,drops[stress]); | |||||
set_pitch(syl,(pitch >> 8),drops[stress]); | |||||
} | } | ||||
else | else | ||||
if(stress >= SECONDARY) | if(stress >= SECONDARY) | ||||
{ | { | ||||
set_pitch(syl,pitch,drops[stress]); | |||||
set_pitch(syl,(pitch >> 8),drops[stress]); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
/* unstressed, drop pitch if preceded by PRIMARY */ | /* unstressed, drop pitch if preceded by PRIMARY */ | ||||
if((syllable_tab[ix-1].stress & 0x3f) >= SECONDARY) | if((syllable_tab[ix-1].stress & 0x3f) >= SECONDARY) | ||||
set_pitch(syl,pitch - (th->body_lower_u << 8), drops[stress]); | |||||
set_pitch(syl,(pitch >> 8) - th->body_lower_u, drops[stress]); | |||||
else | else | ||||
set_pitch(syl,pitch,drops[stress]); | |||||
set_pitch(syl,(pitch >> 8),drops[stress]); | |||||
} | } | ||||
ix++; | ix++; | ||||
static void SetPitchGradient(int start_ix, int end_ix, int start_pitch, int end_pitch) | |||||
{//==================================================================================== | |||||
// Set a linear pitch change over a number of syllables. | |||||
// Used for pre-head, unstressed syllables in the body, and the tail | |||||
static int calc_pitch_segment2(int ix, int end_ix, int start_p, int end_p, int min_stress) | |||||
/****************************************************************************************/ | |||||
/* Linear pitch rise/fall, change pitch at min_stress or stronger | |||||
Used for pre-head and tail */ | |||||
{ | |||||
int ix; | |||||
int stress; | int stress; | ||||
int pitch; | int pitch; | ||||
int increment; | int increment; | ||||
int drop; | int drop; | ||||
SYLLABLE *syl; | SYLLABLE *syl; | ||||
if(ix >= end_ix) | |||||
return(ix); | |||||
n_increments = count_increments(ix,end_ix,min_stress); | |||||
increment = (end_p - start_p) << 8; | |||||
increment = (end_pitch - start_pitch) << 8; | |||||
n_increments = end_ix - start_ix; | |||||
if(n_increments <= 0) | |||||
return; | |||||
if(n_increments > 1) | if(n_increments > 1) | ||||
{ | { | ||||
increment = increment / n_increments; | increment = increment / n_increments; | ||||
} | } | ||||
pitch = start_p << 8; | |||||
while(ix < end_ix) | |||||
pitch = start_pitch << 8; | |||||
for(ix=start_ix; ix < end_ix; ix++) | |||||
{ | { | ||||
syl = &syllable_tab[ix]; | syl = &syllable_tab[ix]; | ||||
stress = syl->stress; | stress = syl->stress; | ||||
if(increment > 0) | if(increment > 0) | ||||
{ | { | ||||
set_pitch(syl,pitch,-increment); | |||||
set_pitch(syl,(pitch >> 8),-(increment >> 8)); | |||||
pitch += increment; | pitch += increment; | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
drop = -increment; | |||||
drop = -(increment >> 8); | |||||
if(drop < min_drop[stress]) | if(drop < min_drop[stress]) | ||||
drop = min_drop[stress]; | drop = min_drop[stress]; | ||||
pitch += increment; | pitch += increment; | ||||
if(drop > 0x900) | |||||
drop = 0x900; | |||||
set_pitch(syl, pitch, drop); | |||||
if(drop > 18) | |||||
drop = 18; | |||||
set_pitch(syl, (pitch >> 8), drop); | |||||
} | } | ||||
ix++; | |||||
} | } | ||||
return(ix); | |||||
} /* end of calc_pitch_segment2 */ | |||||
} // end of SetPitchGradient | |||||
/* vowels before the first primary stress */ | /* vowels before the first primary stress */ | ||||
/******************************************/ | /******************************************/ | ||||
if(number_pre > 0) | |||||
{ | |||||
ix = calc_pitch_segment2(ix, ix+number_pre, th->pre_start, th->pre_end, 0); | |||||
} | |||||
SetPitchGradient(ix, ix+number_pre, th->pre_start, th->pre_end); | |||||
ix += number_pre; | |||||
/* body of tonic segment */ | /* body of tonic segment */ | ||||
/*************************/ | /*************************/ | ||||
{ | { | ||||
tone_pitch_env = tn->pitch_env0; | tone_pitch_env = tn->pitch_env0; | ||||
drop = tn->tonic_max0 - tn->tonic_min0; | drop = tn->tonic_max0 - tn->tonic_min0; | ||||
set_pitch(&syllable_tab[ix++],tn->tonic_min0 << 8,drop << 8); | |||||
set_pitch(&syllable_tab[ix++],tn->tonic_min0, drop); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
tone_pitch_env = tn->pitch_env1; | tone_pitch_env = tn->pitch_env1; | ||||
drop = tn->tonic_max1 - tn->tonic_min1; | drop = tn->tonic_max1 - tn->tonic_min1; | ||||
set_pitch(&syllable_tab[ix++],tn->tonic_min1 << 8,drop << 8); | |||||
set_pitch(&syllable_tab[ix++],tn->tonic_min1, drop); | |||||
} | } | ||||
syllable_tab[tone_posn].env = tone_pitch_env; | syllable_tab[tone_posn].env = tone_pitch_env; | ||||
/* tail, after the tonic syllable */ | /* tail, after the tonic syllable */ | ||||
/**********************************/ | /**********************************/ | ||||
calc_pitch_segment2(ix, end, tn->tail_start, tn->tail_end, 0); | |||||
SetPitchGradient(ix, end, tn->tail_start, tn->tail_end); | |||||
return(tone_pitch_env); | return(tone_pitch_env); | ||||
} /* end of calc_pitches */ | } /* end of calc_pitches */ | ||||
{ | { | ||||
syl = &syllable_tab[st_ix]; | syl = &syllable_tab[st_ix]; | ||||
x = syl->pitch1 - 72; | |||||
if(x < 0) x = 0; | |||||
p->pitch1 = x; | |||||
x = syl->pitch2 - 72; | |||||
if(x < 0) x = 0; | |||||
p->pitch2 = x; | |||||
p->pitch1 = syl->pitch1; | |||||
p->pitch2 = syl->pitch2; | |||||
p->env = PITCHfall; | p->env = PITCHfall; | ||||
if(syl->flags & SYL_RISE) | if(syl->flags & SYL_RISE) | ||||
} | } | ||||
} | } | ||||
} // end of Translator::CalcPitches | |||||
} // end of CalcPitches | |||||
MENU_FORMAT_DICTIONARY, | MENU_FORMAT_DICTIONARY, | ||||
MENU_SORT_DICTIONARY, | MENU_SORT_DICTIONARY, | ||||
MENU_COMPILE_MBROLA, | MENU_COMPILE_MBROLA, | ||||
MENU_COMPILE_INTONATION, | |||||
MENU_SPEAK_TRANSLATE, | MENU_SPEAK_TRANSLATE, | ||||
MENU_SPEAK_RULES, | MENU_SPEAK_RULES, | ||||
MENU_VOWELCHART3, | MENU_VOWELCHART3, | ||||
MENU_LEXICON, | MENU_LEXICON, | ||||
MENU_LEXICON_RU, | MENU_LEXICON_RU, | ||||
MENU_LEXICON_BG, | |||||
MENU_LEXICON_DE, | MENU_LEXICON_DE, | ||||
MENU_LEXICON_IT, | MENU_LEXICON_IT, | ||||
MENU_LEXICON_IT2, | MENU_LEXICON_IT2, |
data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary")); | data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary")); | ||||
data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)")); | data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)")); | ||||
data_menu->Append(MENU_COMPILE_MBROLA, _("Compile &mbrola phonemes list...")); | data_menu->Append(MENU_COMPILE_MBROLA, _("Compile &mbrola phonemes list...")); | ||||
// data_menu->Append(MENU_COMPILE_INTONATION, _("Compile &intonation data")); | |||||
data_menu->AppendSeparator(); | data_menu->AppendSeparator(); | ||||
data_menu->Append(MENU_FORMAT_DICTIONARY, _("&Layout *_rules file")); | data_menu->Append(MENU_FORMAT_DICTIONARY, _("&Layout *_rules file")); | ||||
data_menu->Append(MENU_SORT_DICTIONARY, _("&Sort *_rules file")); | data_menu->Append(MENU_SORT_DICTIONARY, _("&Sort *_rules file")); | ||||
lexicon_menu = new wxMenu; | lexicon_menu = new wxMenu; | ||||
lexicon_menu->Append(MENU_LEXICON_RU, _("Russian (lexicon.dict)")); | lexicon_menu->Append(MENU_LEXICON_RU, _("Russian (lexicon.dict)")); | ||||
lexicon_menu->Append(MENU_LEXICON_BG, _("Bulgarian")); | |||||
lexicon_menu->Append(MENU_LEXICON_DE, _("German")); | lexicon_menu->Append(MENU_LEXICON_DE, _("German")); | ||||
lexicon_menu->Append(MENU_LEXICON_IT, _("Italian")); | lexicon_menu->Append(MENU_LEXICON_IT, _("Italian")); | ||||
lexicon_menu->Append(MENU_LEXICON_IT2, _("Italian, pass 2")); | lexicon_menu->Append(MENU_LEXICON_IT2, _("Italian, pass 2")); | ||||
tools_menu = new wxMenu; | tools_menu = new wxMenu; | ||||
tools_menu->Append(MENU_VOWELCHART, _("Make &Vowels Chart"), vowelchart_menu); | tools_menu->Append(MENU_VOWELCHART, _("Make &Vowels Chart"), vowelchart_menu); | ||||
// tools_menu->Append(MENU_LOAD_WAV, _T("Analyse WAV file")); | // tools_menu->Append(MENU_LOAD_WAV, _T("Analyse WAV file")); | ||||
tools_menu->Append(MENU_LEXICON, _("Compare &Lexicon"), lexicon_menu); | |||||
tools_menu->Append(MENU_LEXICON, _("Process &Lexicon"), lexicon_menu); | |||||
tools_menu->Append(MENU_TO_UTF8, _("Convert file to &UTF8...")); | tools_menu->Append(MENU_TO_UTF8, _("Convert file to &UTF8...")); | ||||
tools_menu->Append(MENU_COUNT_WORDS, _("Count word &frequencies...")); | tools_menu->Append(MENU_COUNT_WORDS, _("Count word &frequencies...")); | ||||
tools_menu->Append(MENU_TEST , _("Test (temporary)")); | tools_menu->Append(MENU_TEST , _("Test (temporary)")); |
{ | { | ||||
if(roman || !(wtab[1].flags & FLAG_FIRST_UPPER)) | if(roman || !(wtab[1].flags & FLAG_FIRST_UPPER)) | ||||
{ | { | ||||
utf8_in(&c2, &word_end[2]); | |||||
if(word_end[0] == '.') | |||||
utf8_in(&c2, &word_end[2]); | |||||
else | |||||
utf8_in(&c2, &word_end[1]); | |||||
if((word_end[1] != 0) && ((c2 == 0) || (wtab[0].flags & FLAG_COMMA_AFTER) || IsAlpha(c2))) | if((word_end[1] != 0) && ((c2 == 0) || (wtab[0].flags & FLAG_COMMA_AFTER) || IsAlpha(c2))) | ||||
{ | { | ||||
// ordinal number is indicated by dot after the number | // ordinal number is indicated by dot after the number | ||||
} // end of CheckDotOrdinal | } // end of CheckDotOrdinal | ||||
static int hu_number_e(const char *word) | |||||
{//===================================== | |||||
// lang-hu: variant form of numbers when followed by hyphen and a suffix starting with 'a' or 'e' (but not a, e, az, ez, azt, ezt, att. ett | |||||
if((word[0] == 'a') || (word[0] == 'e')) | |||||
{ | |||||
if((word[1] == ' ') || (word[1] == 'z') || ((word[1] == 't') && (word[2] == 't'))) | |||||
return(0); | |||||
return(1); | |||||
} | |||||
return(0); | |||||
} // end of hu_numnber_e | |||||
int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) | int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) | ||||
int repeat = 0; | int repeat = 0; | ||||
int n_digits = 0; | int n_digits = 0; | ||||
char *word_start; | char *word_start; | ||||
int num_control = 0; | |||||
unsigned int flags[2]; | unsigned int flags[2]; | ||||
char ph_roman[30]; | char ph_roman[30]; | ||||
char number_chars[N_WORD_BYTES]; | char number_chars[N_WORD_BYTES]; | ||||
sprintf(number_chars," %d ",acc); | sprintf(number_chars," %d ",acc); | ||||
if(word[0] == '.') | |||||
{ | |||||
// dot has not been removed. This implies that there was no space after it | |||||
return(0); | |||||
} | |||||
if(CheckDotOrdinal(tr, word_start, word, wtab, 1)) | if(CheckDotOrdinal(tr, word_start, word, wtab, 1)) | ||||
wtab[0].flags |= FLAG_ORDINAL; | wtab[0].flags |= FLAG_ORDINAL; | ||||
if(tr->langopts.numbers & NUM_ROMAN_ORDINAL) | if(tr->langopts.numbers & NUM_ROMAN_ORDINAL) | ||||
{ | { | ||||
if((n_digits <= 1) && !(wtab[0].flags & FLAG_ORDINAL)) | |||||
return(0); | |||||
wtab[0].flags |= FLAG_ORDINAL; | |||||
if(tr->translator_name == L('h','u')) | |||||
{ | |||||
if(!(wtab[0].flags & FLAG_ORDINAL)) | |||||
{ | |||||
if((wtab[0].flags & FLAG_HYPHEN_AFTER) && hu_number_e(word)) | |||||
{ | |||||
// should use the 'e' form of the number | |||||
num_control |= 1; | |||||
} | |||||
else | |||||
return(0); | |||||
} | |||||
} | |||||
} | } | ||||
tr->prev_dict_flags = 0; | tr->prev_dict_flags = 0; | ||||
TranslateNumber(tr, &number_chars[2], p, flags, wtab); | |||||
TranslateNumber(tr, &number_chars[2], p, flags, wtab, num_control); | |||||
if(tr->langopts.numbers & NUM_ROMAN_AFTER) | if(tr->langopts.numbers & NUM_ROMAN_AFTER) | ||||
strcat(ph_out,ph_roman); | strcat(ph_out,ph_roman); | ||||
tensunits = value % 100; | tensunits = value % 100; | ||||
buf1[0] = 0; | buf1[0] = 0; | ||||
ph_thousands[0] = 0; | |||||
ph_thousand_and[0] = 0; | |||||
if(hundreds > 0) | if(hundreds > 0) | ||||
{ | { | ||||
ph_thousands[0] = 0; | |||||
ph_thousand_and[0] = 0; | |||||
found = 0; | found = 0; | ||||
if(ordinal && (tensunits == 0)) | if(ordinal && (tensunits == 0)) | ||||
{ | { | ||||
} | } | ||||
ph_digits[0] = 0; | ph_digits[0] = 0; | ||||
if(hundreds > 0) | if(hundreds > 0) | ||||
{ | { | ||||
if((tr->langopts.numbers & NUM_AND_HUNDRED) && ((control & 1) || (ph_thousands[0] != 0))) | if((tr->langopts.numbers & NUM_AND_HUNDRED) && ((control & 1) || (ph_thousands[0] != 0))) | ||||
} | } | ||||
ph_hundred_and[0] = 0; | ph_hundred_and[0] = 0; | ||||
if((tr->langopts.numbers & NUM_HUNDRED_AND) && (tensunits != 0)) | |||||
if(tensunits > 0) | |||||
{ | { | ||||
if((value > 100) || ((control & 1) && (thousandplex==0))) | |||||
if((tr->langopts.numbers & NUM_HUNDRED_AND) && ((value > 100) || ((control & 1) && (thousandplex==0)))) | |||||
{ | |||||
Lookup(tr, "_0and", ph_hundred_and); | |||||
} | |||||
if((tr->langopts.numbers & NUM_THOUSAND_AND) && (hundreds == 0) && ((control & 1) || (ph_thousands[0] != 0))) | |||||
{ | { | ||||
Lookup(tr, "_0and", ph_hundred_and); | Lookup(tr, "_0and", ph_hundred_and); | ||||
} | } | ||||
} // end of LookupNum3 | } // end of LookupNum3 | ||||
static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned int *flags, WORD_TAB *wtab) | |||||
{//======================================================================================================== | |||||
static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned int *flags, WORD_TAB *wtab, int control) | |||||
{//===================================================================================================================== | |||||
// Number translation with various options | // Number translation with various options | ||||
// the "word" may be up to 4 digits | // the "word" may be up to 4 digits | ||||
// "words" of 3 digits may be preceded by another number "word" for thousands or millions | // "words" of 3 digits may be preceded by another number "word" for thousands or millions | ||||
n_digit_lookup = 0; | n_digit_lookup = 0; | ||||
buf_digit_lookup[0] = 0; | buf_digit_lookup[0] = 0; | ||||
digit_lookup = buf_digit_lookup; | digit_lookup = buf_digit_lookup; | ||||
number_control = 0; | |||||
number_control = control; | |||||
for(ix=0; isdigit(word[ix]); ix++) ; | for(ix=0; isdigit(word[ix]); ix++) ; | ||||
n_digits = ix; | n_digits = ix; | ||||
if(tr->translator_name == L('h','u')) | if(tr->translator_name == L('h','u')) | ||||
{ | { | ||||
// variant form of numbers when followed by hyphen and a suffix starting with 'a' or 'e' (buit not a, e, az, ez, azt, ezt | |||||
if((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact==1) | |||||
&& ((word[suffix_ix] == 'a') || (word[suffix_ix] == 'e')) && ((c = word[suffix_ix+1]) != ' ') && (c != 'z')) | |||||
// variant form of numbers when followed by hyphen and a suffix starting with 'a' or 'e' (but not a, e, az, ez, azt, ezt | |||||
if((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact==1) && hu_number_e(&word[suffix_ix])) | |||||
{ | { | ||||
number_control |= 1; // use _1e variant of number | number_control |= 1; // use _1e variant of number | ||||
} | } | ||||
int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, WORD_TAB *wtab) | |||||
{//================================================================================================ | |||||
int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, WORD_TAB *wtab, int control) | |||||
{//============================================================================================================= | |||||
if(option_sayas == SAYAS_DIGITS1) | if(option_sayas == SAYAS_DIGITS1) | ||||
return(0); // speak digits individually | return(0); // speak digits individually | ||||
if(tr->langopts.numbers != 0) | if(tr->langopts.numbers != 0) | ||||
return(TranslateNumber_1(tr, word1, ph_out, flags, wtab)); | |||||
return(TranslateNumber_1(tr, word1, ph_out, flags, wtab, control)); | |||||
return(0); | return(0); | ||||
} // end of TranslateNumber | } // end of TranslateNumber |
wxFileConfig *pConfig = (wxFileConfig *)(wxConfigBase::Get()); | wxFileConfig *pConfig = (wxFileConfig *)(wxConfigBase::Get()); | ||||
#ifndef PLATFORM_WINDOWS | #ifndef PLATFORM_WINDOWS | ||||
pConfig->Write(_T("/samplerate"),samplerate); | |||||
// pConfig->Write(_T("/samplerate"),samplerate); | |||||
#endif | #endif | ||||
pConfig->Write(_T("/spectload"),path_spectload); | pConfig->Write(_T("/spectload"),path_spectload); | ||||
pConfig->Write(_T("/spectload2"),path_spectload2); | pConfig->Write(_T("/spectload2"),path_spectload2); |
#define phLONG 0x200000 | #define phLONG 0x200000 | ||||
#define phLENGTHENSTOP 0x400000 // make the pre-pause slightly longer | #define phLENGTHENSTOP 0x400000 // make the pre-pause slightly longer | ||||
#define phRHOTIC 0x800000 | #define phRHOTIC 0x800000 | ||||
#define phNOPAUSE 0x1000000 | |||||
#define phLOCAL 0x80000000 // used during compilation | #define phLOCAL 0x80000000 // used during compilation | ||||
// fixed phoneme code numbers, these can be used from the program code | // fixed phoneme code numbers, these can be used from the program code |