Browse Source

[1.43.31]

*_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-fd96e6ae7743
master
jonsd 15 years ago
parent
commit
cec2c415da
100 changed files with 13396 additions and 5429 deletions
  1. 2
    1
      dictsource/ca_rules
  2. 7758
    1873
      dictsource/da_list
  3. 3150
    2223
      dictsource/da_rules
  4. 2
    2
      dictsource/de_list
  5. 34
    12
      dictsource/dict_phonemes
  6. 7
    3
      dictsource/en_list
  7. 15
    8
      dictsource/en_rules
  8. 75
    59
      dictsource/fr_list
  9. 83
    90
      dictsource/fr_rules
  10. 28
    8
      dictsource/hu_list
  11. 100
    16
      dictsource/hu_rules
  12. 37
    37
      dictsource/is_list
  13. 41
    34
      dictsource/is_rules
  14. 2
    2
      dictsource/nl_list
  15. 3
    1
      dictsource/nl_rules
  16. 1
    1
      dictsource/pt_rules
  17. 14
    3
      dictsource/ta_list
  18. 182
    23
      dictsource/ta_rules
  19. 70
    39
      dictsource/vi_list
  20. 416
    356
      dictsource/vi_rules
  21. 4
    4
      dictsource/zh_list
  22. 97
    56
      phsource/compile_report
  23. BIN
      phsource/l/l_@
  24. BIN
      phsource/l/l_a
  25. BIN
      phsource/l/l_o
  26. BIN
      phsource/l/l_u
  27. BIN
      phsource/l/l_y
  28. 7
    3
      phsource/ph_english
  29. 188
    168
      phsource/ph_french
  30. 103
    24
      phsource/ph_icelandic
  31. 6
    0
      phsource/phonemes
  32. BIN
      phsource/vnasal/aa_n4
  33. BIN
      phsource/vowel/@_bck
  34. BIN
      phsource/vowel/a_6
  35. BIN
      phsource/vowel/a_en
  36. BIN
      phsource/vowel/e_8
  37. BIN
      phsource/vowel/e_mid
  38. BIN
      phsource/vowel/o-
  39. BIN
      phsource/vowel/o_mid2
  40. BIN
      phsource/vowel/u_bck2
  41. BIN
      phsource/vowel/vowelchart.png
  42. BIN
      phsource/vwl_fr/@2r
  43. BIN
      phsource/vwl_fr/_r
  44. BIN
      phsource/vwl_fr/_r2
  45. BIN
      phsource/vwl_fr/a2r
  46. BIN
      phsource/vwl_fr/aa2r
  47. BIN
      phsource/vwl_fr/e2r
  48. BIN
      phsource/vwl_fr/ee2r
  49. BIN
      phsource/vwl_fr/i2r
  50. BIN
      phsource/vwl_fr/o2r
  51. BIN
      phsource/vwl_fr/oo2r
  52. BIN
      phsource/vwl_fr/r
  53. BIN
      phsource/vwl_fr/r@
  54. BIN
      phsource/vwl_fr/r_
  55. BIN
      phsource/vwl_fr/r_@
  56. BIN
      phsource/vwl_fr/r_a
  57. BIN
      phsource/vwl_fr/r_an
  58. BIN
      phsource/vwl_fr/r_e
  59. BIN
      phsource/vwl_fr/r_i
  60. BIN
      phsource/vwl_fr/r_n
  61. BIN
      phsource/vwl_fr/r_o
  62. BIN
      phsource/vwl_fr/r_u
  63. BIN
      phsource/vwl_fr/r_y
  64. BIN
      phsource/vwl_fr/ra
  65. BIN
      phsource/vwl_fr/raa
  66. BIN
      phsource/vwl_fr/re
  67. BIN
      phsource/vwl_fr/ree
  68. BIN
      phsource/vwl_fr/ri
  69. BIN
      phsource/vwl_fr/rj
  70. BIN
      phsource/vwl_fr/ro
  71. BIN
      phsource/vwl_fr/roo
  72. BIN
      phsource/vwl_fr/rr
  73. BIN
      phsource/vwl_fr/ru
  74. BIN
      phsource/vwl_fr/ry
  75. BIN
      phsource/vwl_fr/tr
  76. BIN
      phsource/vwl_fr/trr
  77. BIN
      phsource/vwl_fr/u2r
  78. BIN
      phsource/vwl_fr/w_a
  79. BIN
      phsource/vwl_fr/xr
  80. 1
    1
      platforms/windows/espeakedit/src/speech.h
  81. 1
    1
      platforms/windows/espeakedit/src_copy/speech.h
  82. 15
    2
      platforms/windows/make_espeak.iss
  83. 1
    1
      platforms/windows/make_espeakedit.iss
  84. 1
    1
      platforms/windows/windows_cmd/src/speech.h
  85. 1
    1
      platforms/windows/windows_dll/src/speech.h
  86. 1
    1
      platforms/windows/windows_sapi/src/speech.h
  87. 3
    1
      platforms/windows/windows_sapi/ttsengobj.cpp
  88. 280
    5
      src/compiledata.cpp
  89. 215
    48
      src/compiledict.cpp
  90. 58
    182
      src/dictionary.cpp
  91. 8
    0
      src/espeakedit.cpp
  92. 202
    2
      src/extras.cpp
  93. 22
    2
      src/formantdlg.cpp
  94. 98
    114
      src/intonation.cpp
  95. 2
    0
      src/main.h
  96. 3
    1
      src/menus.cpp
  97. 57
    19
      src/numbers.cpp
  98. 1
    1
      src/options.cpp
  99. 1
    0
      src/phoneme.h
  100. 0
    0
      src/phonemelist.cpp

+ 2
- 1
dictsource/ca_rules View File

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

+ 7758
- 1873
dictsource/da_list
File diff suppressed because it is too large
View File


+ 3150
- 2223
dictsource/da_rules
File diff suppressed because it is too large
View File


+ 2
- 2
dictsource/de_list View File



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

+ 34
- 12
dictsource/dict_phonemes View File

* - : ? 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;

+ 7
- 3
dictsource/en_list View File

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

+ 15
- 8
dictsource/en_rules View File

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

+ 75
- 59
dictsource/fr_list View File

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

+ 83
- 90
dictsource/fr_rules View File

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



+ 28
- 8
dictsource/hu_list View File

_#-á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



+ 100
- 16
dictsource/hu_rules View File

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



+ 37
- 37
dictsource/is_list View File

_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

+ 41
- 34
dictsource/is_rules View File

// 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 ú

+ 2
- 2
dictsource/nl_list View File

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

+ 3
- 1
dictsource/nl_rules View File

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^





+ 1
- 1
dictsource/pt_rules View File

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

+ 14
- 3
dictsource/ta_list View File

பாகவதம் $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


+ 182
- 23
dictsource/ta_rules View File

_) க (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:



+ 70
- 39
dictsource/vi_list View File

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

+ 416
- 356
dictsource/vi_rules
File diff suppressed because it is too large
View File


+ 4
- 4
dictsource/zh_list View File

护 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

+ 97
- 56
phsource/compile_report View File

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

BIN
phsource/l/l_@ View File


BIN
phsource/l/l_a View File


BIN
phsource/l/l_o View File


BIN
phsource/l/l_u View File


BIN
phsource/l/l_y View File


+ 7
- 3
phsource/ph_english View File

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

+ 188
- 168
phsource/ph_french View File

//==================================================== //====================================================
// 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

+ 103
- 24
phsource/ph_icelandic View File

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

+ 6
- 0
phsource/phonemes View File

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

BIN
phsource/vnasal/aa_n4 View File


BIN
phsource/vowel/@_bck View File


BIN
phsource/vowel/a_6 View File


BIN
phsource/vowel/a_en View File


BIN
phsource/vowel/e_8 View File


BIN
phsource/vowel/e_mid View File


BIN
phsource/vowel/o- View File


BIN
phsource/vowel/o_mid2 View File


BIN
phsource/vowel/u_bck2 View File


BIN
phsource/vowel/vowelchart.png View File


BIN
phsource/vwl_fr/@2r View File


BIN
phsource/vwl_fr/_r View File


BIN
phsource/vwl_fr/_r2 View File


BIN
phsource/vwl_fr/a2r View File


BIN
phsource/vwl_fr/aa2r View File


BIN
phsource/vwl_fr/e2r View File


BIN
phsource/vwl_fr/ee2r View File


BIN
phsource/vwl_fr/i2r View File


BIN
phsource/vwl_fr/o2r View File


BIN
phsource/vwl_fr/oo2r View File


BIN
phsource/vwl_fr/r View File


BIN
phsource/vwl_fr/r@ View File


BIN
phsource/vwl_fr/r_ View File


BIN
phsource/vwl_fr/r_@ View File


BIN
phsource/vwl_fr/r_a View File


BIN
phsource/vwl_fr/r_an View File


BIN
phsource/vwl_fr/r_e View File


BIN
phsource/vwl_fr/r_i View File


BIN
phsource/vwl_fr/r_n View File


BIN
phsource/vwl_fr/r_o View File


BIN
phsource/vwl_fr/r_u View File


BIN
phsource/vwl_fr/r_y View File


BIN
phsource/vwl_fr/ra View File


BIN
phsource/vwl_fr/raa View File


BIN
phsource/vwl_fr/re View File


BIN
phsource/vwl_fr/ree View File


BIN
phsource/vwl_fr/ri View File


BIN
phsource/vwl_fr/rj View File


BIN
phsource/vwl_fr/ro View File


BIN
phsource/vwl_fr/roo View File


BIN
phsource/vwl_fr/rr View File


BIN
phsource/vwl_fr/ru View File


BIN
phsource/vwl_fr/ry View File


BIN
phsource/vwl_fr/tr View File


BIN
phsource/vwl_fr/trr View File


BIN
phsource/vwl_fr/u2r View File


BIN
phsource/vwl_fr/w_a View File


BIN
phsource/vwl_fr/xr View File


+ 1
- 1
platforms/windows/espeakedit/src/speech.h View File

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

+ 1
- 1
platforms/windows/espeakedit/src_copy/speech.h View File

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

+ 15
- 2
platforms/windows/make_espeak.iss View File

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

+ 1
- 1
platforms/windows/make_espeakedit.iss View File

[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

+ 1
- 1
platforms/windows/windows_cmd/src/speech.h View File

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

+ 1
- 1
platforms/windows/windows_dll/src/speech.h View File

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







+ 1
- 1
platforms/windows/windows_sapi/src/speech.h View File

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

+ 3
- 1
platforms/windows/windows_sapi/ttsengobj.cpp View File

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

+ 280
- 5
src/compiledata.cpp View File

}; };




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

+ 215
- 48
src/compiledict.cpp View File



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

+ 58
- 182
src/dictionary.cpp View File

***************************************************************************/ ***************************************************************************/


#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");
}
} }
} }



+ 8
- 0
src/espeakedit.cpp View File

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

+ 202
- 2
src/extras.cpp View File





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

+ 22
- 2
src/formantdlg.cpp View File

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

+ 98
- 114
src/intonation.cpp View File



#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



+ 2
- 0
src/main.h View File

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,

+ 3
- 1
src/menus.cpp View File

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

+ 57
- 19
src/numbers.cpp View File

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

+ 1
- 1
src/options.cpp View File

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

+ 1
- 0
src/phoneme.h View File

#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

+ 0
- 0
src/phonemelist.cpp View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save