Browse Source

Merge branch 'master' into android

master
Reece H. Dunn 12 years ago
parent
commit
4236dd282e
95 changed files with 4590 additions and 2545 deletions
  1. 7
    0
      Makefile.am
  2. 52
    33
      dictsource/an_list
  3. 6
    0
      dictsource/an_rules
  4. 110
    0
      dictsource/az_list
  5. 137
    0
      dictsource/az_rules
  6. 80
    78
      dictsource/bn_list
  7. 52
    42
      dictsource/bn_rules
  8. 1055
    882
      dictsource/da_rules
  9. 2
    0
      dictsource/de_list
  10. 103
    53
      dictsource/en_list
  11. 79
    46
      dictsource/en_rules
  12. 3
    0
      dictsource/es_rules
  13. 2
    2
      dictsource/fr_rules
  14. 15
    4
      dictsource/ga_list
  15. 91
    44
      dictsource/ga_rules
  16. 67
    24
      dictsource/hi_rules
  17. 1
    1
      dictsource/hu_list
  18. 33
    3
      dictsource/hu_rules
  19. 60
    3
      dictsource/hy_list
  20. 11
    9
      dictsource/hy_rules
  21. 16
    1
      dictsource/nl_list
  22. 64
    12
      dictsource/nl_rules
  23. 6
    6
      dictsource/pa_rules
  24. 2
    2
      dictsource/pl_list
  25. 205
    107
      dictsource/pt_list
  26. 268
    236
      dictsource/pt_rules
  27. 71
    45
      dictsource/sk_list
  28. 16
    16
      dictsource/tr_list
  29. 37
    23
      dictsource/tr_rules
  30. 404
    273
      dictsource/vi_rules
  31. BIN
      espeak-data/mbrola_ph/fr1_phtrans
  32. 1
    0
      espeak-data/voices/!v/m3
  33. 4
    2
      espeak-data/voices/asia/hy-west
  34. 6
    0
      espeak-data/voices/asia/ko
  35. 12
    0
      espeak-data/voices/asia/vi-sgn
  36. 1
    1
      espeak-data/voices/europe/ga
  37. 3
    3
      espeak-data/voices/other/en-n
  38. 1
    0
      espeak-data/voices/pt
  39. 3
    0
      espeak-data/voices/test/az
  40. BIN
      phsource/envelopes.png
  41. 10
    1
      phsource/intonation
  42. 2
    1
      phsource/mbrola/fr1
  43. 16
    10
      phsource/ph_azerbaijani
  44. 11
    11
      phsource/ph_base2
  45. 5
    2
      phsource/ph_bengali
  46. 208
    140
      phsource/ph_danish
  47. 2
    2
      phsource/ph_english_us
  48. 39
    16
      phsource/ph_hindi
  49. 1
    1
      phsource/ph_portugal
  50. 1
    1
      phsource/ph_pt_brazil
  51. 13
    8
      phsource/ph_spanish
  52. 37
    17
      phsource/ph_turkish
  53. 80
    50
      phsource/ph_vietnam
  54. 42
    5
      phsource/ph_vietnam_hue
  55. 97
    0
      phsource/ph_vietnam_sgn
  56. 60
    52
      phsource/phonemes
  57. BIN
      phsource/ufric/x_.wav
  58. BIN
      phsource/ustop/t_hi.wav
  59. BIN
      phsource/vdiph/ooi
  60. BIN
      phsource/vdiph/ooi_2
  61. BIN
      phsource/vdiph/ooi_3
  62. BIN
      phsource/vdiph/ooi_4
  63. BIN
      phsource/vowel/a_4
  64. BIN
      phsource/vowel/u#_5
  65. BIN
      phsource/vowel/u#_7
  66. BIN
      phsource/vwl_en_us/aU@
  67. BIN
      phsource/w/_w
  68. BIN
      phsource/w/w
  69. 59
    33
      platforms/riscos/Makefile
  70. 141
    47
      platforms/riscos/c/speak_riscos
  71. 14
    14
      platforms/riscos/copysource
  72. 1
    1
      platforms/windows/make_espeak.iss
  73. 1
    1
      platforms/windows/make_espeakedit.iss
  74. 6
    1
      src/compiledata.cpp
  75. 3
    2
      src/compiledict.cpp
  76. 60
    16
      src/dictionary.cpp
  77. 13
    9
      src/espeak.cpp
  78. 8
    1
      src/espeakedit.cpp
  79. 88
    4
      src/extras.cpp
  80. 1
    0
      src/main.h
  81. 4
    2
      src/menus.cpp
  82. 148
    9
      src/numbers.cpp
  83. 194
    59
      src/readclause.cpp
  84. 14
    7
      src/speak.cpp
  85. 11
    0
      src/speak_lib.cpp
  86. 62
    29
      src/speak_lib.h
  87. 1
    1
      src/synthdata.cpp
  88. 3
    9
      src/synthesize.cpp
  89. 5
    5
      src/synthesize.h
  90. 4
    1
      src/tr_languages.cpp
  91. 20
    17
      src/translate.cpp
  92. 9
    3
      src/translate.h
  93. 1
    1
      src/transldlg.cpp
  94. 1
    0
      src/voice.h
  95. 8
    5
      src/voices.cpp

+ 7
- 0
Makefile.am View File

espeak-data/af_dict \ espeak-data/af_dict \
espeak-data/am_dict \ espeak-data/am_dict \
espeak-data/an_dict \ espeak-data/an_dict \
espeak-data/az_dict \
espeak-data/bg_dict \ espeak-data/bg_dict \
espeak-data/bn_dict \ espeak-data/bn_dict \
espeak-data/ca_dict \ espeak-data/ca_dict \
espeak-data/an_dict: src/espeak espeak-data/phontab dictsource/an_list dictsource/an_rules dictsource/an_extra espeak-data/an_dict: src/espeak espeak-data/phontab dictsource/an_list dictsource/an_rules dictsource/an_extra
cd dictsource && ../src/espeak --compile=an && cd .. cd dictsource && ../src/espeak --compile=an && cd ..


az: espeak-data/az_dict
dictsource/az_extra:
touch dictsource/az_extra
espeak-data/az_dict: src/espeak espeak-data/phontab dictsource/az_list dictsource/az_rules dictsource/az_extra
cd dictsource && ../src/espeak --compile=az && cd ..

bg: espeak-data/bg_dict bg: espeak-data/bg_dict
dictsource/bg_extra: dictsource/bg_extra:
touch dictsource/bg_extra touch dictsource/bg_extra

+ 52
- 33
dictsource/an_list View File

y je $atend y je $atend
ch tSe ch tSe
ll 'El^e ll 'El^e
ny n^e
á 'a||akTEntw'aDa á 'a||akTEntw'aDa
é 'e||akTEntw'aDa é 'e||akTEntw'aDa
í 'i||akTEntw'aDa í 'i||akTEntw'aDa
_x#ª %a _x#ª %a
º orDin'al||maskul'in º orDin'al||maskul'in
ª orDin'al||femen'in ª orDin'al||femen'in
ºc gr'aUs||T'e
ºf gr'aUs||'Efe
ºk gr'aUs||k'a
(1 ºc) un||gr'aU||T'e
ºc gr'aUs||Tentigr'aUs
ºf gr'aUs||f'arEnxeI
ºk gr'aUs||k'elBin


_1ox prim'Er _1ox prim'Er
_2ox seQ'und _2ox seQ'und
\ kontraBaRRa \ kontraBaRRa
| b'aRRaBertik'al | b'aRRaBertik'al
° graUs ° graUs
(1 °) un||gr'aU


_- gj'on _- gj'on
! TaRR'ar||eksklamaTj'on ! TaRR'ar||eksklamaTj'on




// exceptions // exceptions
barça b'arsa
holio x'olio
jazz dZ'as
banjo Banjo
barça barsa
desenyermar DesenjErmar
halar xalar
halma xalma
harcia xarTja
hibo xiBo
hoder xoDer
holgorio xolg'orio
holio x'olio
hopar xopar
huerga xuerga
huerza xuerTa
jacuzzi jakusi
jazz jas
jet jet
judo juDo




// Foreign words // Foreign words
android andr'oId
apple 'apEl
at 'at
chat tS'at
chrome kr'ome
espeak isp'ik
(e speak) isp'ik
facebook f'eIsbuk
firefox f'aIrfoks
google g'ugEl
hotmail xotm'eIl
android androId
apple 'apEl
at at
chat tSat
chrome krome
espeak ispik
(e speak) ispik
facebook f'eIsbuk
firefox f'aIrfoks
google g'ugEl
hardware x'ardwer
hockey xokeI
hotmail xotmeIl
(i phone) 'aIfon (i phone) 'aIfon
iphone 'aIfon
(i pod) 'aIpod
ipod 'aIpod
hardware x'ardwer
linux $1
live l'aIB
messenger m'esendZer
mozilla moT'ila
nvda ene|be|de|'a
office 'ofis
skype esk'aIp
iphone 'aIfon
(i pod) 'aIpod
ipod 'aIpod
junior j'unior
linux $1
live laIB
messenger m'esendZer
mozilla moTila
nvda ene|be|de|'a
office ofis
skype eskaIp
software s'oftwer software s'oftwer
thunderbird Tanderb'ird
twitter tw'iter
unix j'uniks
whatsapp was'app
windows w'indows
thunderbird Tanderbird
twitter tw'iter
unix j'uniks
whatsapp wasap
windows w'indows


//mobile _^_EN //mobile _^_EN

+ 6
- 0
dictsource/an_rules View File


// Aragon translation rules // Aragon translation rules
// This file is UTF-8 encoded // This file is UTF-8 encoded


i i i i
i (u_ i i (u_ i
i (A j i (A j




.group j .group j




.group q .group q
q k
qu (A kw qu (A kw
qü kw qü kw
qu (e k qu (e k
u) t (_ t# u) t (_ t#
ei) t (_ t# ei) t (_ t#
n) t (_ = // silent, but stress on last vowel n) t (_ = // silent, but stress on last vowel
n) t (m // Silent
_pos) t (h t
_pos) t (C // Silent
tz T tz T
ue) t (_ t# ue) t (_ t#
ui) t (_ t# ui) t (_ t#

+ 110
- 0
dictsource/az_list View File

// This file is UTF8 encoded
// Spelling to phoneme rules for Azerbaijani


// Numbers
_0 s@f'@R
_1 b'iR
_2 ic'i
_3 'ytS
_4 d'WRd
_5 b'eS
_6 alt'@
_7 jedd'i
_8 s&Cc'iz
_9 dogg'uz
_1X 'on
_2X ijiRm'i
_3X ot'uz
_4X g'@Rx
_5X &ll'i
_6X altm'@S
_7X jetm'iS
_8X s&Cs'&n
_9X doxs'an
_0C j'yz
_0M1 m'in
_0M2 milj'on
_0M3 milj'aRd
_dpt _t,am_| // ??


// Function words
// personal pronouns
mən $u+
sən $u+
o $u+
biz $u+
siz $u+
onlar $u+

// possessive pronouns
mənim $u+
sənin $u+
onun $u+
bizim $u+
sizin $u+
onların $u+

bu $u+


// conjunctions
və $u+
isə $u+
də $u+
həm $u+
ya $u+
da $u+

// prepositions
aid $u+ // about
ilə $u+ // with, by, in
dair $u+ // about

// postpositions
ci $u
cı $u
cü $u
de $u
dir $u
li $u
in $u
nə $u
ya $u
yə $u

// Character names
b be
c dZe
ç tSe
_ə &
d de
f fe
g Je
ğ Qe
h he
x xe
j Ze
k ka
q ge
l el
m em
n en
_o o
p pe
r eR
s se
ş Se
t te
v ve
w dubElv'E
y je
z ze

* ulduz $text
% faiz $text




+ 137
- 0
dictsource/az_rules View File

// This file is UTF8 encoded
// Spelling to phoneme rules for Azerbaijani

// Stress rule: Right-most vowel, but stop before the vowel which is
// marked as unstressed [%].

.L02 ı a o u // back vowels
.L03 i e ö ü

.group a
a a
ai (K aI
-) a (_ a

.group b
b b

.group c
c dZ

.group ç
ç tS

.group d
d d

-) dan (_ d%an
-) dən (_ d%&n
-) dək (_ d%&k
.group e
e e

.group ə
ə &
@) ə (_ %&
-) ə (_ %&

.group f
f f

.group g
g J

.group ğ
ğ Q
A) ğ :
a) ğa :
o) ğo :
u) ğu :
ö) ğö :
ü) ğü :
i) ğ j
e) ğ j

.group h
h h

.group x
x x

.group ı
ı @

.group i
i i
@) iya (_ =i;a

.group j
j Z

.group k
k c
k (K C

.group q
q g
q (_ x

.group l
l l
l (L02 L
L02) l (K L

.group m
m m

.group n
n n

.group o
o o

.group ö
ö W

.group p
p p

.group r
r R
A) r (A *
ğ) r (A *
C) r (_ @-r

.group s
s s

.group ş
ş S

.group t
t t
L03) t (L03 ts

.group u
u u

.group ü
ü y

.group v
v v

.group w
w w

.group y
y j

.group z
z z

.group
ä &

+ 80
- 78
dictsource/bn_list View File

// Translation rules for Bengali

// Translation rules for Bengali
// Improvement input by Him Prasad gautam (Nepal).
// This file is UTF8 encoded // This file is UTF8 encoded


// Numbers // Numbers
_1 '&k _1 '&k
_2 d'uj _2 d'uj
_3 t'in _3 t'in
_4 tS'ar
_4 tSh'ar
_5 p'a~tS _5 p'a~tS
_6 tS#'Oj _6 tS#'Oj
_7 S'at _7 S'at
_9 n'Oj _9 n'Oj


_2a d'u // with hundreds etc. _2a d'u // with hundreds etc.
_6a tS#'a
_6a tS#'O
_9a n'O _9a n'O




_11 '&garo _11 '&garo
_12 b'arO _12 b'arO
_13 t'erO _13 t'erO
_14 tS'oddO
_14 tSh'oddO
_15 p'OnerO _15 p'OnerO
_16 S'olO _16 S'olO
_17 S'OterO _17 S'OterO
_26 tSh'abbiS _26 tSh'abbiS
_27 Sat'aS _27 Sat'aS
_28 'at.#aS _28 'at.#aS
_29 unOtr'iS
_29 'unOtr'iS


_30 tr'iS _30 tr'iS
_31 ekOtr'iS
_32 bOtr'iS
_33 tetr'iS
_34 tSowtr'iS
_35 pO~jtr'iS
_31 'ekOtr'iS
_32 b'Otr'iS
_33 t'etr'iS
_34 tS'owtr'iS
_35 p'O~jtr'iS
_36 tS#'Otr'iS _36 tS#'Otr'iS
_37 Sa~itr'iS
_38 at.tr'iS
_37 S'a~itr'iS
_38 'at.tr'iS
_39 'unOtSOll'iS _39 'unOtSOll'iS


_40 tSOll'iS _40 tSOll'iS
_41 ektSOll'iS
_42 biall'iS
_43 tetall'iS
_44 tSoall'iS
_45 pO~jtall'iS
_46 tSetSOll'iS
_47 SatSOll'is
_48 atSOll'iS
_49 unOpO~tSaS
_50 pO~tS'aS
_51 &kann'o
_52 bajann'o
_53 tepann'o
_54 tSujann'o
_55 pontSann'o
_56 tS#apann'o
_57 Satann'o
_58 at.ann'o
_59 unOS'at.
_41 'ektSOll'iS
_42 b'iall'iS
_43 t'etall'iS
_44 tS'oall'iS
_45 p'O~jtall'iS
_46 tS'etSOll'iS
_47 S'atSOll'is
_48 'atSOll'iS
_49 'unOpO~tSaS
_50 p'O~tS'aS
_51 '&kann'o
_52 b'ajann'o
_53 t'epann'o
_54 tS'ujann'o
_55 p'ontSann'o
_56 tS#'apann'o
_57 S'atann'o
_58 'at.ann'o
_59 'unOS'at.




_60 s'at. _60 s'at.
_61 ekSOt.t.'i
_62 baSOt.t.'i
_63 teSOt.t.'i
_64 tSowSOt.t.'i
_65 pojSOt.t.'i
_66 SeSOt.t.'i
_67 SatSOt.t.'i
_68 at.SOt.t.'i
_6X sat.t.'i
_69 unOSOtt'ur
_70 SOtt'Or
_71 ekatt'Or
_72 bahatt'Or
_73 tehatt'Or
_74 tSuhatt'Or
_75 pOtSatt'Or
_76 tS#ijatt'Or
_77 Satatt'Or
_78 at.att'Or
_79 unOaS'i
_61 'ekSOt.t.'i
_62 b'aSOt.t.'i
_63 t'eSOt.t.'i
_64 tS'owSOt.t.'i
_65 p'ojSOt.t.'i
_66 S'eSOt.t.'i
_67 S'atSOt.t.'i
_68 'at.SOt.t.'i
_6X s'at.t.'i
_69 'unOSOtt'Or
_70 S'Ott'Or
_71 'ekatt'Or
_72 b'ahatt'Or
_73 t'iatt'Or
_74 tS'uhatt'Or
_75 p'OtSatt'Or
_76 tS#'ijatt'Or
_77 S'atatt'Or
_78 'at.att'Or
_79 'unOaS'i


_80 aS'i _80 aS'i
_81 &kaS'i
_82 beraS'i
_83 teraS'i
_84 tSuraS'i
_85 po~tSaS'i
_86 tS#ijaS'i
_87 SataS'i
_88 at.aS'i
_89 ,unOnObb'oj
_81 '&kaS'i
_82 b'eraS'i
_83 t'eraS'i
_84 tS'uraS'i
_85 p'o~tSaS'i
_86 tS#'ijaS'i
_87 S'ataS'i
_88 'at.aS'i
_89 'unOnObb'oj


_90 nObb'oj _90 nObb'oj
_91 &kanObb'oj
_92 beranObb'oj
_93 teranObb'oj
_94 tSuranObb'oj
_95 pOtSanObb'oj
_96 tS#ijanObb'oj
_97 SatanObb'oj
_98 at.anObb'oj
_99 niranObb'oj
_91 '&kanObb'oj
_92 b'eranObb'oj
_93 t'eranObb'oj
_94 tS'uranObb'oj
_95 p'OtSanObb'oj
_96 tS#'ijanObb'oj
_97 S'atanObb'oj
_98 'at.anObb'oj
_99 n'iranObb'oj


_0C S'o _0C S'o
_0M1 h'ajar _0M1 h'ajar
খ k#O খ k#O
গ gO গ gO
ঘ g#O ঘ g#O
ঙ 'uNO~
ঙ 'uNgO~
চ tSO চ tSO
ছ tShO // [h] to distinguish from [tS] ছ tShO // [h] to distinguish from [tS]
জ JO জ JO
অ O অ O
আ a আ a
ই hrOS:o'i ই hrOS:o'i
ঈ dirg#o'i
ঈ d'i:rg#o'i
উ hrOS:o'u উ hrOS:o'u
ঊ dirg#o'u
ঊ d'i:rg#o'u
ঋ ri ঋ ri
ঔ ow ঔ ow




// combining vowel signs // combining vowel signs
া 'akar া 'akar
ি r'oS:ikar
ী d'irg#ikar
r'oS:ukar
ু d'irg#ukar
ি hrOS:o'ikar
ী d'i:rg#ikar
hrOS:o'ukar
ু d'i:rg#ukar
ৃ r'ikar ৃ r'ikar
ে 'ekar ে 'ekar
ৈ 'ojkar ৈ 'ojkar

+ 52
- 42
dictsource/bn_rules View File


// Pronounciation rule for Bengali.
// Improvement input by Him Prasad Gautam (Nepal).
// This file is UTF8 encoded // This file is UTF8 encoded


// letter groups: // letter groups:
// Vowel Signs // Vowel Signs


.group া .group া
a
াঁ a~
C) া a
C) াঁ a~
.group ি .group ি
ি i
িঁ i~
C) ি i
C) িঁ i~
.group ী .group ী
i
ীঁ i~
C) ী i
C) ীঁ i~


.group ূ .group ূ
u
ূঁ u~
C) ূ u
C) ূঁ u~


.group ু .group ু
u
ুঁ u~
C) ু u
C) ুঁ u~
.group ৃ .group ৃ
ৃ ri
ৃঁ ri~
C) ৃ r'i
C) ৃঁ r'i~


.group ে .group ে
ে e
েঁ e~
েউ ew

C) ে e
C) েঁ e~
C) েউ ew


.group ৈ .group ৈ
oj
ৈঁ o~j
C) ৈ oj
C) ৈঁ o~j
.group ো .group ো
o
োঁ o~
C) ো o
C) োঁ o~
.group ৌ .group ৌ
ৌ ow
ৌঁ o~w
C) ৌ ow
C) ৌঁ o~w


// Consonants // Consonants


.group ক .group ক
ক kV ক kV
ক (B k ক (B k


ক্ষ k#k#V // or [k#:] ?
ক্ষ (B k#k#


.group খ .group খ
খ k#V খ k#V
খ (B k# খ (B k#
.group ঙ .group ঙ
ঙ NV ঙ NV
(B N
ঙ (B N




.group চ .group চ




.group ছ .group ছ
ছ tS#V
ছ (B tS#
ছ tShV
ছ (B tSh


.group জ .group জ
.group ঞ .group ঞ
ঞ nV ঞ nV
(B n
ঞ (B n


.group ট .group ট
.group ত .group ত
ত tV ত tV
ত (B t ত (B t
ত (_ to


.group থ .group থ
.group য় .group য়
য় jV য় jV
য় (B j
_) য় (B j
য় (B // used to separate 2 vowels


.group য .group য
য (B dZ য (B dZ
য় jV // nukta য় jV // nukta
য় (B j
_) য় (B j
য় (B


্) য (C & // ব্যস্ত [bæsto] ্) য (C & // ব্যস্ত [bæsto]
্) যা & // ব্যাকরণ [bækɔron] ্) যা & // ব্যাকরণ [bækɔron]
.group হ .group হ
হ hV হ hV
হ (B h হ (B h
হ (_ ho


.group হ্ব .group হ্ব
.group ঢ় // can be ঢ plus nukta .group ঢ় // can be ঢ plus nukta
ঢ় hr.V ঢ় hr.V
ঢ় (B hr. ঢ় (B hr.
ঢ় (_ hr.o




.group ঁ .group ঁ
ঁ O~ // candrabindu, nasalize the previous vowel
C) ঁ O~ // candrabindu, nasalize the previous vowel/Consonants


.group ং .group ং
ং N // anusvara/onushshor

A) ং N // anusvara/onushshor
C) ং N // anusvara/onushshor
.group ঃ // visarga/bishorgo .group ঃ // visarga/bishorgo
ঃ // doubles the following consonant ঃ // doubles the following consonant
ঃ (_ H ঃ (_ H


.group ্ // virama/hoshonto .group ্ // virama/hoshonto
C) ্



.group ় .group ়
় // nukta, modifies a consonant ় // nukta, modifies a consonant

+ 1055
- 882
dictsource/da_rules
File diff suppressed because it is too large
View File


+ 2
- 0
dictsource/de_list View File

_?? zymb'o:l _?? zymb'o:l
_?A b'u:xstA:b@ _?A b'u:xstA:b@
_cap gr'o:s _cap gr'o:s
_sub 'Unt@R|3_!,IndEks||
_sup 'o:b@R|3_!,IndEks||




// accent names // accent names

+ 103
- 53
dictsource/en_list View File

// ?7 Scottish // ?7 Scottish
// ?8 Use full vowel, not schwa in some word endings // ?8 Use full vowel, not schwa in some word endings


// $alt1 use strong ending (-table, -inal)
// $alt2 use weak ending
// $alt1 use strong ending (-an, -table, -inal, -ier)
// $alt2 use weak ending (ard, ate, ery, ess, ile, men)
// $alt3 use weak first vowel, a->[a#], e->[@], o->[0#] // $alt3 use weak first vowel, a->[a#], e->[@], o->[0#]
// $alt4 separate 'h', not 'th'
// $alt6 'to' // $alt6 'to'






// character names // character names
_cap k,ap@-t@L _cap k,ap@-t@L
_sub s,VbskrIpt||
_sup s,u:p3skrIpt||
_?A l,Et3 _?A l,Et3
_?? sImb@L _?? sImb@L
_braille br'eIl _braille br'eIl
_¡ %Inv,3:tI2dEkskl@m'eIS@n _¡ %Inv,3:tI2dEkskl@m'eIS@n
_¦ broUk@nb'A@ _¦ broUk@nb'A@
_¨ daIa#r'i:sIs _¨ daIa#r'i:sIs
_ª fEmI2nIn'O@dI2n@L
_« lEft'gIl@mEt _« lEft'gIl@mEt
_­ makr0n _­ makr0n
² tu:
³ Tri:
_¹ su:p@skrIptw'0n
_² su:p@skrIptt'u:
_³ su:p@skrIptT'ri:
² tu: $native
³ Tri: $native

_´ a#kju:taksEnt _´ a#kju:taksEnt
_· mId@Ld0t _· mId@Ld0t
_¸ sEd'Il@ _¸ sEd'Il@
//_º maskjUlIn'O@dI2n@L
_º dI2gr'i:z
_» raIt'gIl@mEt _» raIt'gIl@mEt
_¿ %Inv,3:tI2dkw'EstS@n _¿ %Inv,3:tI2dkw'EstS@n


_zh tS'aIni:z _zh tS'aIni:z


// Cyrillic letters // Cyrillic letters
а a
б bE
в vE
г gE
д dE
е jE
ё jo
ж ZE
з zE
и I
а a:
б bE:
в vE:
г gE:
д dE:
е jE:
ё jo:
ж ZE:
з zE:
и I:
й ,Ik@-*'atkOji й ,Ik@-*'atkOji
к ka
к ka:
л El/1 л El/1
м Em м Em
н En н En
о o
п pE
о o:
п pE:
р Er р Er
с Es с Es
т tE
у u
т tE:
у u|:
ф Ef ф Ef
х xa
ц tsE
ч tSE
ш Sa
щ StSa
х xa:
ц tsE:
ч tSE:
ш Sa:
щ StSa:
ъ jEr ъ jEr
ы j'Eru ы j'Eru
ь j'eri ь j'eri
э E
ю ju
я ja
ћ tS;E
ђ djE
ќ kjE
э E:
ю ju|:
я ja:
ћ tS;E:
ђ djE:
ќ kjE:




// Arabic letters // Arabic letters
_5o f'If _5o f'If
_20o tw'Enti@ _20o tw'Enti@
_30o T'3:ti@ _30o T'3:ti@
?3 _30o T'IRti@
?5 _30o T'IRti@
_40o f'o@ti@ _40o f'o@ti@
_50o f'Ifti@ _50o f'Ifti@
_60o s'Iksti@ _60o s'Iksti@
i.e aIi:_! $pause i.e aIi:_! $pause
imo $abbrev imo $abbrev
inlb $abbrev inlb $abbrev
ios $abbrev
irc $abbrev irc $abbrev
irs $abbrev irs $abbrev
isbn $abbrev
itx $abbrev itx $abbrev
(km ²) skw,e@kIl'0mIt3z (km ²) skw,e@kIl'0mIt3z
lapd $abbrev lapd $abbrev
ok $abbrev ok $abbrev
omg $abbrev omg $abbrev
os $abbrev os $abbrev
osx $abbrev
otoh $abbrev otoh $abbrev
pcie $abbrev pcie $abbrev
pcmcia $abbrev pcmcia $abbrev
ablaut ablaUt ablaut ablaUt
aborigine ab@r'IdZ@ni aborigine ab@r'IdZ@ni
abracadabra abr@k@d'abr@ abracadabra abr@k@d'abr@
absence abs@ns
absent $1
absentee $3
absent abs'Ent $verb absent abs'Ent $verb
absentia abs'Ent2i:@ absentia abs'Ent2i:@
absinthe absInT absinthe absInT
adieus a#dju:z adieus a#dju:z
adieux a#dju:z adieux a#dju:z
adios aDj'o:s adios aDj'o:s
adjective $1
admirable adm@r@b@L admirable adm@r@b@L
admirably adm@r@bli admirably adm@r@bli
admonition adm@n'IS@n admonition adm@n'IS@n
agressive a#grEsIv // misspell agressive a#grEsIv // misspell
aground a#graUnd aground a#graUnd
ague eIgju: ague eIgju:
aha A:hA:
aha A:h'A:
ahem a#h'Em ahem a#h'Em
ahoy a#hOI ahoy a#hOI
airbus e@bVs airbus e@bVs
alm A:m alm A:m
almost O:lmoUst almost O:lmoUst
allspice $1 allspice $1
alt 0lt // not abbrev
alternate O:lt'3:n@t $only alternate O:lt'3:n@t $only
alternate O:lt3neIt $verb alternate O:lt3neIt $verb
alternately O:lt'3:n@tlI $verbf alternately O:lt'3:n@tlI $verbf
anew a#nju: anew a#nju:
?3 anew a#nu: ?3 anew a#nu:
anime anImeI anime anImeI
anion aneI@n
anise anIs anise anIs
anniversary anIv'3:s@ri anniversary anIv'3:s@ri
anon a#n0n anon a#n0n
antichrist $1 antichrist $1
anticline $1 anticline $1
antidote $1 antidote $1
antifreze $1
antifreeze $1
antigen $1 antigen $1
antihero $1 antihero $1
antilog $1 antilog $1
attribute $alt3 $verb attribute $alt3 $verb
au ,oU au ,oU
aubergine oUb3Zi:n aubergine oUb3Zi:n
audi aUdi
auger O:g3 auger O:g3
augmentation O:gmEnt'eIS@n augmentation O:gmEnt'eIS@n
august O:g@st august O:g@st
boing bOIN boing bOIN
bolognese b0l@n'eIz bolognese b0l@n'eIz
bombard $2 bombard $2
bombardier b0mb3d'i@3
(bon voyage) b0n||vOI'A:Z (bon voyage) b0n||vOI'A:Z
bonbon b0nb0n bonbon b0nb0n
bonhomie b0n@mi: bonhomie b0n@mi:
capitol kapIt@L capitol kapIt@L
caprice ka#pri:s caprice ka#pri:s
carafe ka#raf carafe ka#raf
caramel kar@mEl
?!3 caramel kar@mEl $onlys
caravan kar@van caravan kar@van
carburetor kA@b@r'Et3 carburetor kA@b@r'Et3
?3 carburetor kA@b@reIt3 ?3 carburetor kA@b@reIt3
catholic kaTlIk catholic kaTlIk
carotid $alt3 carotid $alt3
cartel kA@t'El cartel kA@t'El
cavalier $3
cavalier $alt1
caveat kavIat caveat kavIat
?3 caveat kavIA:t ?3 caveat kavIA:t
caviar kavIA@ caviar kavIA@
censure sEnS3 censure sEnS3
ceres si@ri:z ceres si@ri:z
certificate s3tIfIk@t certificate s3tIfIk@t
c'est seI $u
chagrin SagrIn chagrin SagrIn
?3 chagrin Sa#grIn ?3 chagrin Sa#grIn
chalet SaleI chalet SaleI
closet kl0zI2t closet kl0zI2t
cloth kloUD $verb cloth kloUD $verb
c'mon k@m0n c'mon k@m0n
coathanger $alt4
coauthor koU'O:T3 coauthor koU'O:T3
coaxial koU'aksI@l coaxial koU'aksI@l
cobol koUb0l cobol koUb0l
cojones k@hoUneIs cojones k@hoUneIs
coliseum k0l@s'i:@m coliseum k0l@s'i:@m
collage k0l'A:Z collage k0l'A:Z
collarbone k0l3boUn
college k0lI2dZ college k0lI2dZ
collegiate k@li:dZI@t collegiate k@li:dZI@t
colloquial k@loUkwI@L colloquial k@loUkwI@L
cosmos k0zm0s cosmos k0zm0s
?3 cosmos k0zmoUs ?3 cosmos k0zmoUs
cougar ku:g3 cougar ku:g3
counteract $3
countered kaUnt3d countered kaUnt3d
(coup de grâce) ku:d@||gr'A: (coup de grâce) ku:d@||gr'A:
coupon ku:p0n coupon ku:p0n
efile i:faIl efile i:faIl
egg Eg // egging egg Eg // egging
egregious Igr'i:dZ@s egregious Igr'i:dZ@s
?!3 egret i:gr@t
eh eI eh eI
eid i:d eid i:d
el ,El $only el ,El $only
facade f@sA:d facade f@sA:d
façade f@sA:d façade f@sA:d
facetious $alt3 facetious $alt3
faculty fak@Lt2i
faeces fi:si:z faeces fi:si:z
fahrenheit far@nhaIt fahrenheit far@nhaIt
fairest fe@r@st fairest fe@r@st
foyer fOIeI foyer fOIeI
freelance fri:laans freelance fri:laans
freon fri:0n freon fri:0n
frequent frI2kwEnt $verb
fricassee frIka#seI fricassee frIka#seI
frigate frIg@t frigate frIg@t
fringer frIndZ3 // infringer fringer frIndZ3 // infringer
fringing frIndZIN fringing frIndZIN
frisson fri:s'O~
frontend fr'Vnt,End frontend fr'Vnt,End
frontier frVnti@3 frontier frVnti@3
?3 frontier frVnt'i@3 ?3 frontier frVnt'i@3
genuine dZEnju:I#n genuine dZEnju:I#n
geode dZi:oUd geode dZi:oUd
geologist $2 geologist $2
gettin gEt#n-
geyser gi:z3 geyser gi:z3
?3 geyser gaIz3 ?3 geyser gaIz3
gibbon gIb@n gibbon gIb@n
giraffe dZI2raaf giraffe dZI2raaf
github gIthVb github gIthVb
glacier gleIS3 glacier gleIS3
?3 goddess $alt2
goin ,goUI2n $only // for goin' goin ,goUI2n $only // for goin'
gonna g,@n@ gonna g,@n@
goodbye $2 goodbye $2
grosvenor groUv@n3 grosvenor groUv@n3
groupie gru:pi groupie gru:pi
guacamole gwA:ka#m'oUli: guacamole gwA:ka#m'oUli:
guarantee $3
gucci gu:tSi gucci gu:tSi
gui gu:i $onlys gui gu:i $onlys
guinea gIni guinea gIni
habitual $alt3 habitual $alt3
haggis hagIs haggis hagIs
haha hA:h'A: haha hA:h'A:
halation $alt3 // in-
halberdier $alt1
halleluiah halI2'lu:j@ halleluiah halI2'lu:j@
hallelujah halI2'lu:j@ hallelujah halI2'lu:j@
halloween $3 halloween $3
henceforth hEnsfo@T henceforth hEnsfo@T
?3 herb 3:b ?3 herb 3:b
hercules h3:kjUli:z hercules h3:kjUli:z
heredity h3rEdI2ti
?3 hereford h3:f3d ?3 hereford h3:f3d
heretical hI2rEtI2k@L heretical hI2rEtI2k@L
hereto hi@3'tu: hereto hi@3'tu:
kowtow kaUt2aU kowtow kaUt2aU


la ,la $only la ,la $only
(la vie) la||v'i:
laboratory la#b'0r@trI laboratory la#b'0r@trI
?3 laboratory labr@tO:ri ?3 laboratory labr@tO:ri
labor leIb3 labor leIb3
moccasin m0k@sI#n moccasin m0k@sI#n
mocha moUk@ mocha moUk@
modem moUdEm modem moUdEm
?3 modem moUd@m
?3 modem moUd@m
moderate m0d@reIt $verb moderate m0d@reIt $verb
mogul moUg@L mogul moUg@L
moi mwA:
mojito moUh'i:toU mojito moUh'i:toU
molass $alt3 molass $alt3
molybdenum $2 molybdenum $2
notwithstanding $3 notwithstanding $3
noway noUweI noway noUweI
nowhere noUwe@ nowhere noUwe@
?3 nuance nu:0ns
?3 nuance nu:0ns


oases oU'eIsi:z oases oU'eIsi:z
oasis oU'eIsI2s oasis oU'eIsI2s
obdurate $alt2
obelisk 0b@lI2sk obelisk 0b@lI2sk
obesity oUb'i:s@ti obesity oUb'i:s@ti
obey oUb'eI obey oUb'eI
perspex p3:spEks perspex p3:spEks
perus p@ru:z perus p@ru:z
peruse p@ru:z peruse p@ru:z
petit p@ti:
petite p@ti:t petite p@ti:t
petroleum p@troUli:@m petroleum p@troUli:@m
petunia $alt3 petunia $alt3
plicate $2 plicate $2
plumber plVm3 plumber plVm3
plus plVs plus plVs
pois pwA:
poly p0lI poly p0lI
politer p@l'aIt3 politer p@l'aIt3
politic p0l@tIk $onlys politic p0l@tIk $onlys
pretrial pri:tr'aI|@L pretrial pri:tr'aI|@L
pretty prIti pretty prIti
pretzel prEts@L pretzel prEts@L
?3 priestess $alt2
primeval praIm'i:v@L primeval praIm'i:v@L
pristine $2 pristine $2
?3 privacy praIv@si ?3 privacy praIv@si
purist pju:r-Ist purist pju:r-Ist
purport $2 purport $2
purportedly $2 purportedly $2
puttin pUt#n-
pyjama p@dZA:m@ pyjama p@dZA:m@
pyrites paIr'aIti:z pyrites paIr'aIti:z
pythagoras paIT'ag@r@s pythagoras paIT'ag@r@s
ragged ragI#d ragged ragI#d
raiment reIm@nt raiment reIm@nt
rainforest r'eInf,0rI2st rainforest r'eInf,0rI2st
(raison d'être) reIz0n||d'Etr@-
rajah rA:dZA: rajah rA:dZA:
rapier reIpi@3 rapier reIpi@3
rapport rap'o@ rapport rap'o@
rendezvous r0ndI2vu: rendezvous r0ndI2vu:
renegade rEn@geId renegade rEn@geId
reo ri:oU reo ri:oU
repartee rEpA@t'eI
repel rI2pEl repel rI2pEl
replay ri:pleI replay ri:pleI
reply rI2plaI // for replied reply rI2plaI // for replied
settee $2 settee $2
severe sI2v'i@3 $only severe sI2v'i@3 $only
severely sI2v'i@3lI $verbf severely sI2v'i@3lI $verbf
sewn soUn
sex sEks // sexism sex sEks // sexism
several sEvr@L several sEvr@L
shallow SaloU shallow SaloU
temperature tEmprI2tS3 temperature tEmprI2tS3
?!3 temporary tEmpr@rI ?!3 temporary tEmpr@rI
?3 template tEmpl@t ?3 template tEmpl@t
thereof ,De@'0v
thereon ,De@'0n
thereto ,De@'tu:
therefore $1
thereof De@r'0v
thermos T3:m@s thermos T3:m@s
thermostable $alt1 thermostable $alt1
thesis Ti:sIs thesis Ti:sIs
utan u:t'an utan u:t'an
utensil ju:t'Ens@L utensil ju:t'Ens@L


valentine val@ntaIn
valet valeI valet valeI
?3 valet val'eI ?3 valet val'eI
valise va#li:s valise va#li:s
Cheshire tSES3 Cheshire tSES3
Chiswick tSIzIk Chiswick tSIzIk
Clwyd klu:Id Clwyd klu:Id
Conway $1
Dagenham dag@n@m Dagenham dag@n@m
Devon dEv@n Devon dEv@n
Dolgellau d0lg'EClaI Dolgellau d0lg'EClaI
Belize bEl'i:z Belize bEl'i:z
Bengal b,Eng'O:l Bengal b,Eng'O:l
Benin bEnIn Benin bEnIn
Berkeley b3:kli
Bhutan bu:t'an Bhutan bu:t'an
Bideford bIdIf@d Bideford bIdIf@d
Bogota b0g@t'A: Bogota b0g@t'A:
Cyprus saIpr@s Cyprus saIpr@s
Dahomey $alt3 Dahomey $alt3
Dallas dal@s Dallas dal@s
Dagestan dA:gIst'A:n
Damascus $alt3 Damascus $alt3
Dakota $alt3 Dakota $alt3
Danish deInIS Danish deInIS
Egyptian IdZ'IpS@n Egyptian IdZ'IpS@n
Eire e@r@ Eire e@r@
Elysee eIl'i:zeI Elysee eIl'i:zeI
Elysée eIl'i:zeI
Erebus ErI#b@s
Erie i@ri Erie i@ri
Euphrates ju:fr'eIti:z Euphrates ju:fr'eIti:z
Eyjafjalla eIja#fjatla# Eyjafjalla eIja#fjatla#
Gurmukhi gU@mUki Gurmukhi gU@mUki
Harare ha#rA:ri Harare ha#rA:ri
Hanoi han'OI Hanoi han'OI
Harvard $alt2
Havana ha#van@ Havana ha#van@
Hawaii h@w'aIi: Hawaii h@w'aIi:
Hawai'i h@w'aIi: Hawai'i h@w'aIi:
Hebrew hi:bru: Hebrew hi:bru:
Hebrides hEbr@di:z Hebrides hEbr@di:z
Honduras h0nd'jU@r@s Honduras h0nd'jU@r@s
Honolulu $3
Houston hju:st@n Houston hju:st@n
Idaho $1 Idaho $1
Illinois Il@n'OI Illinois Il@n'OI
?3 Korean k3r'i:@n ?3 Korean k3r'i:@n
Kosovo k0s@voU Kosovo k0s@voU
Kuala kwA:la# Kuala kwA:la#
Kyrgyz k3:rgIz
Kyrgyzstan k3:rgIst'A:n
Lagos leIg0s Lagos leIg0s
Lahore $alt3
Lebanon lEb@n0n Lebanon lEb@n0n
Leipzig laIpsIg Leipzig laIpsIg
Leone li:'oUn Leone li:'oUn
Pyrenees pIr@n'i:z Pyrenees pIr@n'i:z
Qatar katA@ Qatar katA@
Quebec kwI2bEk Quebec kwI2bEk
Québec kwI2bEk
Raleigh rA:li Raleigh rA:li
Reno ri:noU Reno ri:noU
Rio ri:oU Rio ri:oU
Andrea $2 Andrea $2
Adrian eIdri@n Adrian eIdri@n
Agatha aga#T@ Agatha aga#T@
Angela andZ@l@
Angelika $2
Aggie agi Aggie agi
Agnes agn@s Agnes agn@s
Aguilera agi:l'e@r@ Aguilera agi:l'e@r@
Andre 0ndreI Andre 0ndreI
Andrea andri@ Andrea andri@
Andreas A:ndr'eI@s Andreas A:ndr'eI@s
Angela $1
Angela ang@l@
Anita $alt3 Anita $alt3
Anthony ant@ni Anthony ant@ni
Anton ant0n Anton ant0n
Aoife i:f@ Aoife i:f@
Aoiffe i:f@ Aoiffe i:f@
Aphrodite afr@d'aIti
Archibald A@tSIbO:ld Archibald A@tSIbO:ld
Archie A@tSi Archie A@tSi
Ares e@ri:z Ares e@ri:z
Duncan dVnk@n Duncan dVnk@n
Dvina d@vi:n@ Dvina d@vi:n@
Dylan dIl@n Dylan dIl@n
Ebenezar Eb@n'i:z3
Edith i:dIT Edith i:dIT
Eduardo Edw'A@doU Eduardo Edw'A@doU
Elijah I2laIdZ@ Elijah I2laIdZ@
Giovanni dZ@v'A:ni Giovanni dZ@v'A:ni
Graeme greI@m Graeme greI@m
Graham greI@m Graham greI@m
Gruffydd grIfIT
Guido gwi:doU Guido gwi:doU
Guinevere gwInI#vi@3
Hadrian heIdri:@n Hadrian heIdri:@n
Hamish heImIS Hamish heImIS
Harriet hari@t Harriet hari@t
Harvey hA@vi
Heidi haIdi Heidi haIdi
Hecate hEk@teI Hecate hEk@teI
Hekate hEk@teI Hekate hEk@teI
Luigi lu:'i:dZi Luigi lu:'i:dZi
Luis lu:Is Luis lu:Is
Lupe lu:peI Lupe lu:peI
Luther lu:T3
Madeleine mad@lI2n Madeleine mad@lI2n
Madeline mad@lI2n Madeline mad@lI2n
Maeve meIv Maeve meIv
Phoebe fi:bi: Phoebe fi:bi:
Rachael reItS@L Rachael reItS@L
Rachel reItS@L Rachel reItS@L
Rae reI
Rafael rA:faI'El Rafael rA:faI'El
Rashid rA:S'i:d Rashid rA:S'i:d
Raul raU'u:l Raul raU'u:l
(Santa claus) s'ant@||kl'O:z (Santa claus) s'ant@||kl'O:z
Saoirse si@S@ Saoirse si@S@
Sarah se@r@ Sarah se@r@
Sarisa $alt3
Seamus SeIm@s Seamus SeIm@s
Sean SO:n Sean SO:n
Sebastian $alt3 Sebastian $alt3
Sonia s0nj@ Sonia s0nj@
Sophie soUfi Sophie soUfi
Stephen sti:v@n Stephen sti:v@n
Stevie sti:vi
Stewart stju:3t Stewart stju:3t
?3 Stewart stu:3t ?3 Stewart stu:3t
Stuart stju:3t Stuart stju:3t
Wallace w0lI#s Wallace w0lI#s
Wally w0li Wally w0li
?3 William wIlj@m ?3 William wIlj@m
Yerevan jEr@v'an
Yves i:v Yves i:v
Yvonne $2 Yvonne $2
Zoe zoUi Zoe zoUi
Capone ka#poUn Capone ka#poUn
Carnegie kA@n@gi Carnegie kA@n@gi
Cohen koU@n Cohen koU@n
Connolly $1
Cthulhu k@-Tu:l#u: Cthulhu k@-Tu:l#u:
Chrysler kraIsl3 Chrysler kraIsl3
(da vinci) da#vIntSi (da vinci) da#vIntSi
Genghis dZENgIs Genghis dZENgIs
Gibson gIbs@n Gibson gIbs@n
Guinness gInIs Guinness gInIs
Gutierrez gu:tj'ErEz
Hades heIdi:z Hades heIdi:z
Hamilton ham@Lt@n Hamilton ham@Lt@n
Hoosier hu:Z3 Hoosier hu:Z3
(at once) a#t_w0ns (at once) a#t_w0ns
?6 (at once) a#t_wVns ?6 (at once) a#t_wVns
(at will) a#t_w'Il (at will) a#t_w'Il
(at & t) 'eIt2i:@nt'i:


with wID $u with wID $u
(with the) w%IDD@2 $nounf (with the) w%IDD@2 $nounf


//conjunctions //conjunctions


although OlD'oU $pause
although 0lD'oU $pause
and and $u $pause $only and and $u $pause $only
as %az $only as %az $only
(as is) ,az,Iz $pause (as is) ,az,Iz $pause
these Di:z $u $nounf $strend2 $only these Di:z $u $nounf $strend2 $only
those DoUz $u $nounf $strend2 $only those DoUz $u $nounf $strend2 $only
there De@ $u $strend2 $only there De@ $u $strend2 $only
there've De@v $u
(there are) D%e@,A@ $strend (there are) D%e@,A@ $strend
(there be) De@b'i: (there be) De@b'i:
(there were) D%e@,w3: $strend (there were) D%e@,w3: $strend

+ 79
- 46
dictsource/en_rules View File

ab (ruc ab ab (ruc ab
ab (sce ab ab (sce ab
ab (sei ab ab (sei ab
absen (t ,abs@n
_) ab (sen ab
_) abse (ntC ,abs@
ab (solu ab ab (solu ab
ab (sti ab ab (sti ab
ab (ular 'ab ab (ular 'ab
b) ab (y eIb b) ab (y eIb
b) ab (yl ab b) ab (yl ab
&) able (_S4iev @b@L // suffix &) able (_S4iev @b@L // suffix
&) able (_$w_alt eIb@L
&) able (_$w_alt1 eIb@L
&c) able (_ @b@L &c) able (_ @b@L
@ct) able (_ =@b@L @ct) able (_ =@b@L
&) ability (S7iev @b'IlI2t%i // suffix &) ability (S7iev @b'IlI2t%i // suffix
f) ac (ilit @s f) ac (ilit @s
_m) ace (d asI _m) ace (d asI
m) achi (nA# @Si: m) achi (nA# @Si:
m) achina (t aSI2neI
m) achina (t akI2neI
ach (rom ak ach (rom ak
ac (id_ as ac (id_ as
_) ac (i a#s _) ac (i a#s
_) alber (tA alb'3: _) alber (tA alb'3:
_) al (c al _) al (c al
alco (h alk@ alco (h alk@
&) al (cy_ @l
_) al (d O:l _) al (d O:l
alde (hy 'aldI alde (hy 'aldI
ale (_ eIl ale (_ eIl
ale (h eIl ale (h eIl
X) al (ed al X) al (ed al
k) alei (d @laI k) alei (d @laI
_v) alen (t al@n
aleph alEf aleph alEf
_op) al (es @l
_) alexan alIgz'aan _) alexan alIgz'aan
_) alfa alf@ _) alfa alf@
_) al (g al _) al (g al
t) all (e O:l t) all (e O:l
thr) all O:l thr) all O:l
Av) al (en @l Av) al (en @l
w) all (A 0l
w) all (A+ 0l
w) alle O:l w) alle O:l
w) all (et 0l
w) all O:l w) all O:l
w) all (a 0l w) all (a 0l
al (tAr 0l al (tAr 0l
amer (ic a#mEr amer (ic a#mEr
c) am (ero am c) am (ero am
c) am (el am c) am (el am
car) am (el @m
am (i_ 'A:m am (i_ 'A:m
ami (g a#mi: ami (g a#mi:
_d) am (i eIm _d) am (i eIm
hum) an (_ @n hum) an (_ @n
&) an (ty_ @n &) an (ty_ @n
&) an (t_ @n &) an (t_ @n
&) an (t_$w_alt an
?3 &) an (t_$w_alt A:n
&) an (t_$w_alt1 an
?3 &) an (t_$w_alt1 A:n
?8 &) an (t_ a#n ?8 &) an (t_ a#n
_f) an (at a#n _f) an (at a#n
pl) an (t_ an pl) an (t_ an
&) an (ese @n &) an (ese @n
_) ane (s anI _) ane (s anI
an (gul 'an an (gul 'an
_) ani anI
_) ani (on anaI
&) ani (_ 'A:nI &) ani (_ 'A:nI
@st) ani (_S1 =i
an (ia 'eIn an (ia 'eIn
ania (c_ 'eInIa ania (c_ 'eInIa
ania (c a#naI@ ania (c a#naI@
_t) ar (_ A@ _t) ar (_ A@
&) ar (dis 3 &) ar (dis 3
&) ar (diz 3 &) ar (diz 3
&) ar (d_$w_alt2 3
&d) ar (d_ 3 &d) ar (d_ 3
gg) ar (d_ 3 gg) ar (d_ 3
&h) ar (d_ 3 &h) ar (d_ 3
sp) ar (enC ar sp) ar (enC ar
ar' (nt A@ ar' (nt A@
ar (et ar ar (et ar
ar (iaC_ 'e@
ar (iaB_ 'e@
ar (ia_ 'e@ ar (ia_ 'e@
@) arily (_ 'Er@l%I @) arily (_ 'Er@l%I
?3 @) arily (_ 'e@r@l%I ?3 @) arily (_ 'e@r@l%I
u) ar (ish e@r u) ar (ish e@r
?3 _) ar (istocrat a#r ?3 _) ar (istocrat a#r
log) ar (i @r log) ar (i @r
marg) ar (AtA_ 3r'
m) ar (it ar m) ar (it ar
p) ar (i ar p) ar (i ar
p) ar (in e@ p) ar (in e@
_w) ar (d O@ _w) ar (d O@
sw) ar (d O@ sw) ar (d O@
chw) ar (d O@ chw) ar (d O@
&) arye (_ 3ri


.group as .group as
_) as (@ a#s _) as (@ a#s
av (eng a#v av (eng a#v
_) av (erC a#v _) av (erC a#v
av (oA a#v av (oA a#v
d) av (en av
d) av (id eIv d) av (id eIv
j) av (a A:v j) av (a A:v
j) av (el av j) av (el av
l) av (en av
_B) av (en av
al) av (er 'A:v al) av (er 'A:v
sc) av (en av sc) av (en av
_) avi (A eIvI _) avi (A eIvI
bi (ry bI bi (ry bI
bi (sc bI bi (sc bI
bi (sec b%aI bi (sec b%aI
bi (sh bI
_) bi (sh bI
bi (sm bI bi (sm bI
bi (sq bi: bi (sq bi:
bi (str bi: bi (str bi:
bron) ch k bron) ch k
ch (ute S ch (ute S
ch (ure S ch (ure S
za) ch k


.group co .group co
_) co (ag k%oU _) co (ag k%oU
co (rro k@ co (rro k@
co (rrup k@ co (rrup k@
_) costar koUstA@ _) costar koUstA@
_) counter (@P7 k'aUnt@ // prefix
_) counter (@P7 k'aUnt3 // prefix


.group d .group d
d d d d
st) ea (k eI st) ea (k eI
w) eapo Ep@ w) eapo Ep@
eager i:g3 eager i:g3
j) ealou El@
j) ea (lou E
&) eal (_ i@l &) eal (_ i@l
z) ea (lo E z) ea (lo E
C) ea (lt E C) ea (lt E
s) er (van 3: s) er (van 3:
ery (_ @r%i ery (_ @r%i
?3 ery (_++$w_alt2 @rI ?3 ery (_++$w_alt2 @rI
?3 @@AC) ery (_ e@ri
?3 @@AC) ery (_ ,e@ri
ery (A 3j ery (A 3j
_v) ery ErI2 _v) ery ErI2
qu) ery i@rI qu) ery i@rI
_x) er (o i@r
z) er (o i@r z) er (o i@r
_C) er (o_ i@r _C) er (o_ i@r
er (rA E er (rA E
err (_N e@ err (_N e@


.group es .group es
ess (_$w_alt2 @s
&) es (_S1i z &) es (_S1i z
&es) es (_ i:z &es) es (_ i:z
ese (_ i:z ese (_ i:z
ex (erc Eks ex (erc Eks
_) ex (A %Egz _) ex (A %Egz
_) exh %Egz _) exh %Egz
_) ex (hal %Eks
_) exh (ibiti %Eks
?3 _) exhu %Egzu: ?3 _) exhu %Egzu:
_) ex (it Egz _) ex (it Egz
exor (c Eks3 exor (c Eks3
g (eek g g (eek g
_) g (ert g _) g (ert g
_) g (ek g _) g (ek g
g (eld g
ge (nic_ dZ'E ge (nic_ dZ'E
genesis dZ'EnI2sIs genesis dZ'EnI2sIs
geous dZ=@s geous dZ=@s
iza (tion aIzeI iza (tion aIzeI
?3 iza (tion @zeI ?3 iza (tion @zeI
ize (_ aIz ize (_ aIz
ial) ize (_S3 aIz
&l) ize (_S3 aIz
&l) ized (_S4 aIzd
&l) izing (_S5 ,aIzIN
ize (d_ aIz ize (d_ aIz
i (zen I i (zen I
iz (er_ aIz iz (er_ aIz
&n) iel (_ j@L &n) iel (_ j@L
&r) iel (_ =i:@L &r) iel (_ =i:@L
ie (n i@ ie (n i@
&) ie (n_ =i@n
&) ie (n_ =i@
d) iene (_ 'aIi:n d) iene (_ 'aIi:n
ie (ntal I'E ie (ntal I'E
g) ie (n i: g) ie (n i:
ier i@3 ier i@3
ier (a I'e@r ier (a I'e@r
&) ier (_NS2i 3 &) ier (_NS2i 3
&) ier's (_NS4i 3z
ier (_$w_alt1 'i@3
_h) ie (r aI3 _h) ie (r aI3
pl) ier (_ aI3 pl) ier (_ aI3
_Cr) ier aI3 _Cr) ier aI3
impo (ten Imp@ impo (ten Imp@
_) im (pre@P2 %Im _) im (pre@P2 %Im
impreg Impr'Eg impreg Impr'Eg
impreg (nat ImprEg
?!3 impreg (nat Impr,Eg
im (presa ,Im im (presa ,Im
im (provis Im im (provis Im
im (pulse_ Im im (pulse_ Im


.group in .group in
@) ing (_+S3dve %IN @) ing (_+S3dve %IN
@) ings (_S4dve %INz
@) ings (_S1m z
@) ingly (_S5dve %INl%I @) ingly (_S5dve %INl%I
@) ingment (_S7dve %INm@nt @) ingment (_S7dve %INm@nt
logu) ing (_S4v %IN logu) ing (_S4v %IN
_) inno (ce In@ _) inno (ce In@
_) inno (v In@ _) inno (v In@
_) inn (um %In _) inn (um %In
_) in (of In
_) in (org In _) in (org In
_) in (p In _) in (p In
_) in (que In _) in (que In
adm) ini InI adm) ini InI
m) iniatur InItS3 m) iniatur InItS3
m) inera (l In@r@ m) inera (l In@r@
in (al_$w_alt 'aIn
in (al_$w_alt1 'aIn
&m) in (al_ =In &m) in (al_ =In
f) in (a aIn f) in (a aIn
@g) in (a_ aIn @g) in (a_ aIn
v) ine (g InI# v) ine (g InI#
in (ea In in (ea In
in (ee In in (ee In
in (esc In
c) in (e In c) in (e In
inc) in (e In inc) in (e In
g) in (e In g) in (e In
is (er+_ aIz is (er+_ aIz
iser (_ aIz3 iser (_ aIz3
&) ish (_ I2S &) ish (_ I2S
ish (A_ 'i:S
is (ive aIs is (ive aIs
_) island aIl@nd _) island aIl@nd
_) is (le aI _) is (le aI
iss (a_ 'Is iss (a_ 'Is
issimo (_ 'IsImoU issimo (_ 'IsImoU
chr) is (t_ aIs chr) is (t_ aIs
@) istan (_ =Istan
@) istani (_ Ist'A:nI
@) istan (_ =IstA:n
@) istan (_N =Istan
@) iste (_ 'i:st @) iste (_ 'i:st
@) is (tic_ 'Is @) is (tic_ 'Is
r) is (y_ =@s r) is (y_ =@s
oea (_ 'i@ oea (_ 'i@
_) oe (d i: _) oe (d i:
p) oe (m oUI p) oe (m oUI
oer oU@
oer oU3
_) oe (s i: _) oe (s i:
&) oe (s_S2 z &) oe (s_S2 z
oesopha I2s0f@ oesopha I2s0f@
o (tion oU o (tion oU
m) o (tiv oU m) o (tiv oU
r) o (to oU r) o (to oU
pr) oto oUtoU
pr) oto (C oUtoU
pr) oto (n oUt0 pr) oto (n oUt0
m) otor oUt3 m) otor oUt3
n) o (tor oU n) o (tor oU
olt oUlt olt oUlt
w) olv Ulv w) olv Ulv
N_p) oly ,0lI N_p) oly ,0lI
_) ol (ym @l


.group om .group om
&) om (_ @m &) om (_ @m
t) omb (K u:m t) omb (K u:m
w) omb (_ u:m w) omb (_ u:m
c) ombe (_ u:m c) ombe (_ u:m
_tr) ombo (n %0mboU
c) om (e Vm c) om (e Vm
c) omm (e Vm c) omm (e Vm
_d) om (a @m _d) om (a @m
Cd) on (_ @n Cd) on (_ @n
?3 ag) on (_ 0n ?3 ag) on (_ 0n
rg) on (_ @n rg) on (_ @n
&k) on (_ @n
&s) on (_ @n &s) on (_ @n
&t) on (_ @n &t) on (_ @n
&tr) on (_ 0n &tr) on (_ 0n
pers) on (i '0n pers) on (i '0n
postp) on 'oUn postp) on 'oUn
_sp) on 0n _sp) on 0n
&s) on (an @n
on (ald 0n on (ald 0n
&) on (age_ @n &) on (age_ @n
d) on (at %oUn d) on (at %oUn
nt) or (_ o@ nt) or (_ o@
vent) or (_ 3 vent) or (_ 3
y) or (k O@ y) or (k O@
&) or (ant_ 3r
or (arL02 3r or (arL02 3r
&) or (ation 3r &) or (ation 3r
_) ora (to 0r@ _) ora (to 0r@
w) or (e o@ w) or (e o@
or (um_ 'o@r or (um_ 'o@r
&) ory (_ @r%I &) ory (_ @r%I
?3 @@At) ory (_ o:ri
?3 @@At) ory (_ ,o:ri
_st) ory o@rI _st) ory o@rI


.group os .group os
_all) ow aU _all) ow aU
isall) ow aU isall) ow aU
cl) ow aU cl) ow aU
fl) ow (er aU
fl) ower aU|3
gl) ow (er aU gl) ow (er aU
pl) ow aU pl) ow aU
_n) ow (_ aU _n) ow (_ aU
prede (ces pri:dI prede (ces pri:dI
_) pre (diP3 pr%i: _) pre (diP3 pr%i:
_) pre (dic pr%I _) pre (dic pr%I
_) predi (lec pr,i:dI2
?3 _) predi (lec prEd@
_) pre (em pr%i: _) pre (em pr%i:
_) pre (fec pri: _) pre (fec pri:
_) pre (feren prE _) pre (feren prE
_) re (arm %ri: _) re (arm %ri:
_) re (au@P2 ,ri: _) re (au@P2 ,ri:
re (ck rE re (ck rE
reckon rEk@n
reco (g rEk@ reco (g rEk@
_) re (comP2 r,i: _) re (comP2 r,i:
_) re (conP2 ,ri: _) re (conP2 ,ri:
m) s (i z m) s (i z
a) s (el_ z a) s (el_ z
m) s (y z m) s (y z
n) s (y_ z
a) s (e s a) s (e s
pha) s (e z pha) s (e z
la) s (e z la) s (e z
@) s (hill_ s @) s (hill_ s
@) s (hous s @) s (hous s
_) she' %Si: _) she' %Si:
A) sh (i_ =S
A) sh (A_ =S
&) ship (_S4 SIp &) ship (_S4 SIp
&) ships (_S5 SIps &) ships (_S5 SIps
&) shire (_S5 S3 &) shire (_S5 S3
_) sus (A su:z _) sus (A su:z
su (al Zu: su (al Zu:
n) su (al sju: n) su (al sju:
?3 n) su (al Su:
_) su (b sV _) su (b sV
_) su (bdi s,V _) su (bdi s,V
su (bdue s%V su (bdue s%V
_) t (sY t _) t (sY t
_) t (wY t _) t (wY t
_) tz (ar ts _) tz (ar ts
t (h$w_alt4 t


tch tS tch tS
_) tele tElI2 _) tele tElI2
tse (_ tsi tse (_ tsi
_) tsk t'@sk _) tsk t'@sk
_) tsu tsu: _) tsu tsu:
tt (i_ =t
_) two tu: _) two tu:
ttu (r t@ ttu (r t@
tz ts tz ts
th (ern_ D th (ern_ D
_) thio T,aIoU _) thio T,aIoU
th (ith D th (ith D
th (old th
th (ole th th (ole th
_) th (om@ t _) th (om@ t
ph) th T ph) th T
ear) th (y T ear) th (y T
_) there De@ _) there De@
_) them D%Em _) them D%Em
_) there (@ D%e@
_) the (mA Ti: _) the (mA Ti:


.group ti .group ti
&s) tion tS@n &s) tion tS@n
?8 &) tion S=Vn ?8 &) tion S=Vn
?8 &s) tion tSVn ?8 &s) tion tSVn
tion (al S=@-n
tion (al_ S=@-n
tion (al S@-n
&) tious S=@s &) tious S=@s
AC) tive (_ =tIv AC) tive (_ =tIv


@) tu (lat =tSU @) tu (lat =tSU
?3 tu (Ant tSu: ?3 tu (Ant tSu:
?3 tu (Ancy tSu: ?3 tu (Ancy tSu:
tu (ous tSu:
tu (ous =tSu:
@) tur (A tS@r @) tur (A tS@r
@) tur (al_ tS=@r @) tur (al_ tS=@r
&) tur (y tS@r &) tur (y tS@r
d) u (ly ju: d) u (ly ju:
z) u (l_ 'u: z) u (l_ 'u:
&) um (_ @m &) um (_ @m
vol) u (m ju:
vol) u (me ju:
u (ma_ 'u: u (ma_ 'u:
h) u (man ju: h) u (man ju:
u (me ju: u (me ju:
?3 _) vibra (t v'aIbreI ?3 _) vibra (t v'aIbreI
vivi (@ vIvI vivi (@ vIvI
viv (_ vaIv viv (_ vaIv
_) vo (lC v0


.group w .group w
w w w w
C) yes (_ aIz C) yes (_ aIz
_) yes jEs _) yes jEs
yeah jEh yeah jEh
yew ju:
@C) y (gen I @C) y (gen I
?!3 d) y (nas I ?!3 d) y (nas I
s) ynch Ink s) ynch Ink
E (ntu 'E E (ntu 'E
E (ntous 'E E (ntous 'E
E (o_ I2 E (o_ I2
Eous (_ =j@s
Eous (_ =i@s
l) E (ps E l) E (ps E
l) E (pt E l) E (pt E
Eri (A 'i@rI2 Eri (A 'i@rI2




.group ' .group '
's (_S2 z
f) 's (_S2 s
p) 's (_S2 s
t) 's (_S2 s
k) 's (_S2 s
se) 's (_S2 I2z
s) 's (_S2 I2z
ce) 's (_S2 I2z
ch) 's (_S2 I2z
och) 's (_S2 s
sh) 's (_S2 I2z
x) 's (_S2 I2z
z) 's (_S2 I2z
's (_S2m z
f) 's (_S2m s
p) 's (_S2m s
t) 's (_S2m s
k) 's (_S2m s
se) 's (_S2m I2z
s) 's (_S2m I2z
ce) 's (_S2m I2z
ch) 's (_S2m I2z
och) 's (_S2m s
sh) 's (_S2m I2z
x) 's (_S2m I2z
z) 's (_S2m I2z
6_) 's (_ I2z 6_) 's (_ I2z
16_) 's (_ z 16_) 's (_ z
're (_S3 @ 're (_S3 @

+ 3
- 0
dictsource/es_rules View File

_) d (rA d _) d (rA d
_) d (A d _) d (A d
d (A D d (A D
d (_ D
d (cY D d (cY D
d (L03 D d (L03 D
d (v D
m) d d m) d d
n) d d n) d d
l) d d l) d d
_) gn (A n _) gn (A n
_) g (A g _) g (A g
g (A Q g (A Q
g (_ Q
g (cY Q g (cY Q
g (L03 Q g (L03 Q
m) g g m) g g

+ 2
- 2
dictsource/fr_rules View File

_) game (X _^_en _) game (X _^_en
girl _^_en // girl girl _^_en // girl
gh (K _^_en gh (K _^_en
gy (_ _^_en
@) gy (_ _^_en




.group h .group h
y (nn i y (nn i


// group y: English section // group y: English section
_C) y (_ _^_en
//_C) y (_ _^_en
AC) y (_ _^_en AC) y (_ _^_en
C) y (e_ _^_en C) y (e_ _^_en
%C) y (_ _^_en %C) y (_ _^_en

+ 15
- 4
dictsource/ga_list View File

// Irish Gaeilge dictionary // Irish Gaeilge dictionary
// written by Ronan McGuirk // written by Ronan McGuirk
// January 2013
// version 2.5
// 2013
// version 2.6.1
// Please send comments and suggestions to [email protected]

// This file is UTF8 encoded // This file is UTF8 encoded


// letters // letters
// accent names // accent names


// names of symbols // names of symbols
ª_. pO#nk
_. pO#nk
_, k0m@ _, k0m@
_; semI _; semI
_: ko:l0n _: ko:l0n
amuigh @mu1'I amuigh @mu1'I
amháin @w'A:in amháin @w'A:in
am aUm am aUm
an @n
anaithnid '0nah@nIdZ
anois @nIS anois @nIS
anonn @naUn anonn @naUn
ann aUn ann aUn
anseo @nS'O anseo @nS'O
anuas a#n'u@s
aodh e: aodh e:
aodha e: aodha e:
aon e:@n aon e:@n
(ar ais) Er'aS (ar ais) Er'aS
arís @r'i:S arís @r'i:S
as 0s as 0s
aschurtha '0sxUrh@

atá @t['A: $u atá @t['A: $u
baill bu1'i:l baill bu1'i:l
bhaill vu1'i:l bhaill vu1'i:l
beidh bEg beidh bEg
bhfuil w'Il bhfuil w'Il
bheas v'e:@s
bhuel w'El bhuel w'El
ceithre kEr@ ceithre kEr@
cathair k'0h@r cathair k'0h@r
chlainne xl'InE chlainne xl'InE
chun xUn $u chun xUn $u
crainn kri:n crainn kri:n
chrainn xri:n
de dE $u+ de dE $u+
des dEs $u des dEs $u


do dO# $u do dO# $u
domhnach d[aUn@x domhnach d[aUn@x
domhnaigh d[aUnig domhnaigh d[aUnig
dúghorm d['u:Q"Or@m
eile 'El@ eile 'El@
euro ju:ro: euro ju:ro:
faic f@ak faic f@ak
(muigheo) mu1'i:||'o: (muigheo) mu1'i:||'o:
mhuigh vu1'i: mhuigh vu1'i:
(mhaigh eo) vu1'i:||'o: (mhaigh eo) vu1'i:||'o:
mhama w'0m@
maith m'0 maith m'0
mhaith w'0 mhaith w'0
mbeadh m;O#X mbeadh m;O#X
os o:s os o:s
rabh raU rabh raU
raibh rEv raibh rEv
raidió r'adi:o:
réamhrá r'e:@vr,a: réamhrá r'e:@vr,a:
réidh re: réidh re:
's s
samhain saUIn samhain saUIn
san s@n san s@n
seo S@_ seo S@_

+ 91
- 44
dictsource/ga_rules View File



// translation rules for Irish Gaeilge // translation rules for Irish Gaeilge
// This file is UTF-8 encoded // This file is UTF-8 encoded
// written by Ronan McGuirk January 2013
// Version 2.5B
// written by Ronan McGuirk 2013
// Version 2.6.1
// Please send comments and suggestions to [email protected]



// Conditional rules // Conditional rules
// ?1 allow eclipsis as 2 separate words // ?1 allow eclipsis as 2 separate words
.L03 b bh mb c ch f m mh dh // used for words likemuir or cuid .L03 b bh mb c ch f m mh dh // used for words likemuir or cuid
.L04 b bh mb // for words like beag .L04 b bh mb // for words like beag
.L05 nn nna nnas dh r s ntas nach nas nais dar mar rtha nta mh chas chais cht chta nnach ntach llach d l ll // word endings where @ is to repleace ea or a .L05 nn nna nnas dh r s ntas nach nas nais dar mar rtha nta mh chas chais cht chta nnach ntach llach d l ll // word endings where @ is to repleace ea or a
.L06 aidh idh aí á eá eadh adh ad imid aimid imis aimis ainn inn idís aidís éin // word endings where f changes to h
.L06 aidh idh aí á eá eadh adh ad adsa imid aimid imis aimis ainn inn idís aidís éin // word endings where f changes to h
.L07 b c g ch bh gh mb .L07 b c g ch bh gh mb
.L08 lc ll nt bhse // for words like cailc .L08 lc ll nt bhse // for words like cailc
.L09 cl cr chr f .L09 cl cr chr f
.L12 á é ó eo ua // when followed by i .L12 á é ó eo ua // when followed by i
.L13 oc omb .L13 oc omb
.L14 río dún gnío // followed with mh .L14 río dún gnío // followed with mh
.L15 c ch f m d dh g gc gh mh // aoi following
.L15 c ch f bhf m d dh g gc gh mh // aoi following
.L16 b c bh ch gr ghr // for inn word ending .L16 b c bh ch gr ghr // for inn word ending
.L17 l le li niste nn .L17 l le li niste nn
.L18 n nt nte neann neadh ntear nim nfear nfinn
.L18 n nt nte neann neadh ntear nim nfear nfinn nfidh nfidis neamar
.L19 na nea ra rea la llea arga // word endings with silent dh .L19 na nea ra rea la llea arga // word endings with silent dh
.L20 eo eoir eá eabh io iu iú // slender m .L20 eo eoir eá eabh io iu iú // slender m
.L21 ll nn ndán nntán .L21 ll nn ndán nntán
.L22 eadh eag eaga eagán eagáinín eo io iu iú eall eabh ealtaine
.L22 eadh eag eaga eagán eagáinín eo io iu iú eall eabh ealtaine eann
.L23 ea eo i .L23 ea eo i
.L24 b mb bh g gh p ph bp m mh .L24 b mb bh g gh p ph bp m mh


abht aU#t[ abht aU#t[
amhr aUr // words like amhras amhr aUr // words like amhras
K) amhl aUl K) amhl aUl
abhra aUr@ // words like slabhra
abh (C aU // words like slabhra
aghaidh aIg aghaidh aIg
t) abhair u:@r t) abhair u:@r
th) abhair u:@r th) abhair u:@r
t) abhar u:@r t) abhar u:@r
th) abhar u:@r th) abhar u:@r
_) an (sL01 @n _) an (sL01 @n
_) an (- 0n // an prefix
_) a (nA @
_) an (_ @n
_) an (- '0n // an prefix
é) a @ // words like féach é) a @ // words like féach
X) a (nn_ aU# X) a (nn_ aU#
X) a (ll_ aU# X) a (ll_ aU#
_) ao e: _) ao e:
ae e: ae e:
amhna (_ aUn@ amhna (_ aUn@
arraing arIng
_) ath (@@P3 ,0_


.group á .group á
á A: á A:
@) á ,A: @) á ,A:
áinig A:nIg áinig A:nIg
ái 'A:i ái 'A:i


.group ai .group ai
ai a# ai a#
L04) ai (L17 0# L04) ai (L17 0#
m) ai (n 0# m) ai (n 0#
c) ai (th 0# c) ai (th 0#
ch) ai (th 0# ch) ai (th 0#
ai (tín 0#
ai (d 0# ai (d 0#
p) ai (l 0# p) ai (l 0#
@) ai (L11_ I @) ai (L11_ I
X) aigh 'aI X) aigh 'aI
aigh aI# L04) aill (_ wi:l aigh aI# L04) aill (_ wi:l
aing (_ Ing aing (_ Ing
ai (llimh '0 // words like Gaillimh



.group b .group b
b b // broad b b // broad
L01) b b; // slender L01) b b; // slender
bh (_ vv bh (_ vv
bh (L22 vj // slender bh (L22 vj // slender
L01) bh v L01) bh v
?1 _m_) b (@
?1 _m_) b (@
_) bhf v // urú broad _) bhf v // urú broad
_) bhf (L22 v; // urú slender _) bhf (L22 v; // urú slender
_) bp b // urú broad _) bp b // urú broad
a) bh (a U // for example cabhair a) bh (a U // for example cabhair
ear) bha u: // words like Cearbhall ear) bha u: // words like Cearbhall
bhfaigh v'aI bhfaigh v'aI
_) beann (@ ba#n
_) bheann (@ va#n
_) bun (C@P3 b,Un


.group c .group c
c k c k
c (L01 k; // slender c (L01 k; // slender
ch (L01 C; ch (L01 C;
ch (é+ C; ch (é+ C;
ch (ei+ x; ch (ei+ x;
?1 _g_) c (@
?1 _g_) c (L01
?1 _g_) c (@
?1 _g_) c (L01
_) cabhr k'aUr _) cabhr k'aUr
_) chabhr x'aUr _) chabhr x'aUr
_) ceann (C@P5 k;,aUn
_) cheann (C@P6 C;,aUn


.group d .group d
d d[ // broad d d[ // broad
L01) d dZ // slender L01) d dZ // slender
d (L22 dZ // slender d (L22 dZ // slender
d (L01 d; // slender d (L01 d; // slender
i) d (i dZ i) d (i dZ
?1 _n_) d (@
?1 _n_) d (@
dh Q // broad dh Q // broad
dh (ui Q // broad dh (ui Q // broad
dh (ao Q // broad dh (ao Q // broad
?1 _) d (_t d[ ?1 _) d (_t d[
?1 _) d (_tL01 dZ ?1 _) d (_tL01 dZ
_) d' (@P2 d _) d' (@P2 d

_) d' d
_) d (_'fh d

d'fh (L01 d
i) dh (_ g i) dh (_ g
a) dh (_ X a) dh (_ X
o) dh (_ X o) dh (_ X
dheartháir gr@h'A:r dheartháir gr@h'A:r
deirfiúr d;r@f'u:r deirfiúr d;r@f'u:r
dheirfiúr g;r@f'u:r dheirfiúr g;r@f'u:r
_) do (Ch@@P2 d[,U_
_) dí (@@P2 d,i:


.group e .group e
e E# e E#
eá A: eá A:
r) ei (m aI r) ei (m aI
eighea aI eighea aI
eighea aI eighea aI
s) ei (nn aI
sh) ei (nn aI
eigh aI eigh aI


eo o: eo o:
eogh o:
eoi o:
eogha o:
eoghai o:
d) eo (ch O# d) eo (ch O#
dh) eo (ch O#
_) eo (ch O# _) eo (ch O#
s) eo (_ @ s) eo (_ @


.group é .group é
é 'e: é 'e:
éi 'e: éi 'e:
éa 'e:
_) éi (rig aI // words like éirigh _) éi (rig aI // words like éirigh
_h) éi (rí aI
_) éi (rí aI // words like éirí _) éi (rí aI // words like éirí
_) éireoidh aIro:Ig _) éireoidh aIro:Ig
éacs e:@ks éacs e:@ks


.group ea .group ea
ea a# ea a#
eai a#
X) ea (L21_ aU X) ea (L21_ aU
ea (ltaine aU ea (ltaine aU
g) ea (ll aU g) ea (ll aU
l) eamh (n aU
dr) ea (m aU
X) ea (ch 0 X) ea (ch 0
_L04) ea (g @ _L04) ea (g @
_L04) ea (dh_ @ _L04) ea (dh_ @
eanbhean 'an@v,an eanbhean 'an@v,an
eadhb aIb eadhb aIb


.group f .group f
f f // broad f f // broad
f (L22 f; // slender f (L22 f; // slender
fh (éin_ h fh (éin_ h
fh (L22 ; // slender fh (L22 ; // slender
@) f (L06_ h @) f (L06_ h
?1 _bh_) f (@
?1 _bh_) f (L22 ;
_) fo (C@@P2 f,U
_) fogh f'aU
?1 _bh_) f (@
?1 _bh_) f (L22 ;



.group g .group g
g g // broad g g // broad
g (L01 g; // slender g (L01 g; // slender
?1 _n_) g (@
?1 _n_) g (@
_) gh Q" _) gh Q"
_) gh (L01 Q"j _) gh (L01 Q"j
_) gc g // urú broad _) gc g // urú broad
gh (n X@ gh (n X@
gheobh j'o: gheobh j'o:
gabh gaU gabh gaU
_) gearr (C@P5 g;,aR
_) ghearr (C@P6 Q"j,aR


.group h .group h
h h // silent h h // silent


.group i .group i
i I i I
_) i I _) i I
ia i@ ia i@
ia (tha i: ia (tha i:
io O# io O#
io (dá I
_) io (nadh u:// words like ionadh _) io (nadh u:// words like ionadh
s) io (mb I
sh) io (mb I

_pr) io (n u: _pr) io (n u:
L16) inn (_ i:n L16) inn (_ i:n
iai i:i iai i:i
L12) i i // non syllabic short i after long vowel L12) i i // non syllabic short i after long vowel
iú u: iú u:
m) i (d_ i: // verb ending m) i (d_ i: // verb ending
_) in (@@P2 ,In_
_) ionad (C@@P5 ,Ona#d[


.group í .group í
í 'i: í 'i:
íomh 'i:v
íochn 'i:xn
í (_ i:
ín (_ i:n
ío i:@



.group l .group l
l l // broad l l // broad
L01) l l; // slender L01) l l; // slender
ll (L23 l; ll (L23 l;
l (g l@ l (g l@
l (b l@ l (b l@
_) lorg (@@P4 l,Or@g
_) lán (C@@P3 l,A:n


.group m .group m
m m // broad m m // broad
m (L20 m; //slender m (L20 m; //slender
_) mh (n v@ _) mh (n v@
léir) mheas vas léir) mheas vas
r) m @m // words like gorm r) m @m // words like gorm
_) mear (@@P4 m,ar


.group n .group n
n n // broad n n // broad
n (L01 n; // slender n (L01 n; // slender
n (ch n@ n (ch n@
c) n @n c) n @n
ch) n @n ch) n @n
_) nasc (C@@ n,0sk


.group o .group o
o O# o O#
_) o 'O _) o 'O
odl (a O#l odl (a O#l
oí i: oí i:


.group ó .group ó
ó 'o: ó 'o:
ómhai o:@ ómhai o:@


ói (p@ 'o:

.group oi .group oi
oi O oi O
_L15) oi (+ @'I _L15) oi (+ @'I
_) oi (leá 'I _) oi (leá 'I
oidh aI oidh aI
oir (_ 'ERR oir (_ 'ERR
_sc) oi (r O
oigh (ea aI oigh (ea aI


.group p .group p
p p // broad p p // broad
ph f // broad ph f // broad
p (L22 p; // slender p (L22 p; // slender
ph (L20 f; // slender ph (L20 f; // slender
?1 _b_) p (@
?1 _b_) p (@




.group r .group r
L12i) r (t_ Z L12i) r (t_ Z
rr R rr R
rg r@g rg r@g
rgh rQ"
L01) rg R@g // slender L01) rg R@g // slender
r (bh r@ r (bh r@
ríomh ri:@v
s) r (A R s) r (A R
_) ramh raU _) ramh raU


.group s .group s
s s // broad s s // broad
L01) s S // slender L01) s S // slender
s (cL01 S s (cL01 S
s (CCL01 S // slender s (CCL01 S // slender
s (pCé s // broad s (pCé s // broad
?1 _t_) s (@
?1 _t_) s (@
sh h sh h
sh (CL01 h sh (CL01 h
sh (L01 h; sh (L01 h;
s (lL01 S s (lL01 S
_') s (_ s // 's in poems etc
_) sain (@P4 s,an


.group t .group t
t t[ // broad t t[ // broad
L01) t c // slender L01) t c // slender
?1 _) t (_L01 c ?1 _) t (_L01 c
L01C) t tS // slender after consonant L01C) t tS // slender after consonant
t (CL01 tS // slender with following consonant before vowels t (CL01 tS // slender with following consonant before vowels
?1 _d_) t (@
?1 _d_) t (@
th h th h
th (L01 h; th (L01 h;
L01C) th h L01C) th h
thne (_ h@nE thne (_ h@nE
A) th (_ // silent th at word end A) th (_ // silent th at word end


.group u .group u
u U# u U#
ua u@ ua u@
uai (d ui uai (d ui
uá u:'A: uá u:'A:
ui I ui I
ui (s U
ui (sce_ I
uinn (_ 'i:n uinn (_ 'i:n
uinti U#'i:ntI uinti U#'i:ntI
_b) uí wi: _b) uí wi:
_bh) uí wi: _bh) uí wi:
g) uí wi: g) uí wi:
gh) uí wi:
umh u: umh u:
L03) ui @I L03) ui @I
_d) u (l_ O# _d) u (l_ O#
gh) ui (gh_ @i: gh) ui (gh_ @i:
uí i: uí i:
uachai 'ux@ uachai 'ux@
_) uimhir (C@P6 ,IvIR



.group ú .group ú
ú u: ú u:
únmh u:nv únmh u:nv

+ 67
- 24
dictsource/hi_rules View File



.group ऊ .group ऊ
ऊ u ऊ u
ऊं u~ // + anusvara
ऊँ u~ // + candrabinbu
ऊं (_ u~ // + anusvara
ऊँ (_ u~ // + candrabinbu


.group ऋ .group ऋ
ऋ rI ऋ rI


.group ऎ .group ऎ
ऎ e ऎ e
ऎं (_ e~
ऎँ (_ e~


.group ए .group ए
ए e: ए e:
एँ e~:
एं (_ e~:
ा) एँ (_ j


.group ऐ .group ऐ
ऐ E: // ?? [aI] [E:] [&:] ऐ E: // ?? [aI] [E:] [&:]
ऐं E~
ऐँ E~
ऐं (_ E~
ऐँ (_ E~
?2 ऐ aI // ?? [aI] [E:] [&:] ?2 ऐ aI // ?? [aI] [E:] [&:]






.group ऒ .group ऒ
ऒ o ऒ o
ऒं (_ o~
ऒँ (_ o~


.group ओ .group ओ
ओ o: ओ o:
ओं o~ // +anusvara
ओँ o~ // +candrabindu
ओं (_ o~ // +anusvara
ओँ (_ o~ // +candrabindu
ा) ओं (_ w // +anusvara
ा) ओँ (_ w


.group औ .group औ
औ O: // ?? [aU] [O:] औ O: // ?? [aU] [O:]
औं O~ // +anusvara
औँ O~ // +candrabindu
औं (_ O~ // +anusvara
औँ (_ O~ // +candrabindu
?3 औ aU // ?? [aU] [O:] ?3 औ aU // ?? [aU] [O:]






.group ा .group ा
ा a: ा a:
ा (ँ a~
ाँ (_ a~
ां (_ a~
ाव aU ाव aU


.group ि .group ि
.group ी .group ी
ी i: ी i:
ी (_ i ी (_ i
ी (ँ i~
ीँ (_ i~
ीं (_ i~


.group ु .group ु
ु u
ु U
ु (ँ u~
ुं (_ u~
ुँ (_ u~


.group ू .group ू
ू u: ू u:
ूं u~ // or O~ ??
ूँ u~
ू (ँ u~
ूं (_ u~ // or O~ ??
ूँ (_ u~


.group ृ .group ृ
ृ rI ृ rI


.group ॆ .group ॆ
ॆ e ॆ e
ॆ (ँ e~
ॆं (_ e~
ॆँ (_ e~


.group े .group े
े e: े e:
े (ँ e~
ें (_ e~:
ेँ (_ e~:


.group ै .group ै
ै E: // ?? [aI] [E:] [&:] ै E: // ?? [aI] [E:] [&:]
ैं E~
ैँ E~
ै (ँ E~
ैं (_ E~
ैँ (_ E~
?2 ै aI // ?? [aI] [E:] [&:] ?2 ै aI // ?? [aI] [E:] [&:]


.group ॉ .group ॉ


.group ॊ .group ॊ
ॊ o ॊ o
ॊ (ँ o~
ॊं (_ o~
ॊँ (_ o~


.group ो .group ो
ो o: ो o:
ों o~
ोँ o~
ो (ँ o~
ों (_ o~
ोँ (_ o~


.group ौ .group ौ
ौ O: // [O:] or [aU] ?? ौ O: // [O:] or [aU] ??
ौं O~
ौँ O~
ौ (ँ O~ // [O:] or [aU] ??
ौं (_ O~
ौँ (_ O~
?3 ौ aU // [O:] or [aU] ?? ?3 ौ aU // [O:] or [aU] ??


.group ॢ // vowel sign l .group ॢ // vowel sign l
क़ qV क़ qV
क़ (B q क़ (B q


क्ष kSV
क्ष (B kS
.group ख .group ख
ख k#V ख k#V
ख (B k# ख (B k#
ज (B J ज (B J
ज़ zV ज़ zV
ज़ (B z ज़ (B z
ज्ञ gjV
ज्ञ (B gj


.group झ .group झ
झ J#V झ J#V
झ (B J# झ (B J#



.group ञ .group ञ
ञ n^V ञ n^V
ञ (B n^ ञ (B n^
्) ञ (_ n^
्) ञ (_ n^@



.group ट .group ट
ट t.V ट t.V
ढ़ (B r.h // nukta ढ़ (B r.h // nukta


.group ण .group ण
ण n.V // (temporary) same as dental [n]
ण n.V
ण (B n. ण (B n.
्) ण (_ n.@ ्) ण (_ n.@


न्) म (_ m // n +virama न्) म (_ m // n +virama


.group य .group य
य j@
य jV
य (B j य (B j
C) य (_ Ej // [Ej] not [@j]
्) य (_ j@ ्) य (_ j@


.group र .group र
र rV र rV
र (B r र (B r
र (_ r
्) र (_ r@ ्) र (_ r@


.group ऱ // rra .group ऱ // rra
ऱ rV // (temporary) same as [r]
ऱ rV // (temporary) same as [r] should this be [r.] or perhaps [z.] ?
ऱ (B r ऱ (B r
्) ऱ (_ r@ ्) ऱ (_ r@


_) व wV _) व wV
_) व (B w _) व (B w
_) व (् v // +virma _) व (् v // +virma
व (_ w


.group श .group श
श SV श SV
श (B S श (B S


.group ष .group ष
ष s.V //?? or retroflex [S]
ष (B s. //??
ष s.V
ष (B s.


.group स .group स
स sV स sV
स (B s स (B s


.group ह .group ह
ह H
ह HV
ह (B H ह (B H





+ 1
- 1
dictsource/hu_list View File

(emelte ki) EmEltE_||ki $unstressend (emelte ki) EmEltE_||ki $unstressend
tagságát $unstressend tagságát $unstressend
(a szakadékot) A'||sAkAde:kot $unstressend (a szakadékot) A'||sAkAde:kot $unstressend
(az országban) Az_'||orsa:gbAn $unstressend
(az országban) Az_'||oR2sa:gbAn $unstressend
eszközét $unstressend eszközét $unstressend
méretű $unstressend méretű $unstressend
ketyeg $unstressend ketyeg $unstressend

+ 33
- 3
dictsource/hu_rules View File

orszá) g (gyarapod g orszá) g (gyarapod g
anya) g (gyár g anya) g (gyár g
anya) g (gyűjt g anya) g (gyűjt g
végi) g (gya g
végi) g (gy g
me) ggy (mag J me) ggy (mag J
me) ggy (íz J: me) ggy (íz J:
bádo) g (gy g bádo) g (gy g
ro) ggyj (ék J: ro) ggyj (ék J:
rá) g (gyűjt g //for example virággyűjtés, virággyűjteményt words rá) g (gyűjt g //for example virággyűjtés, virággyűjteményt words
_lo) g (gyűjt g //for example loggyűjtemény word _lo) g (gyűjt g //for example loggyűjtemény word
dro) g (gyanú g
dro) g (gy g
le) gg (roteszk g: le) gg (roteszk g:
_agya) g (gy g _agya) g (gy g
anya) g (győz g anya) g (győz g
hazugsá) g (gy g hazugsá) g (gy g
tőze) g (gy g tőze) g (gy g
doppin) g (gy g doppin) g (gy g
baromsá) g (gy g
tehetsé) g (gy g
bete) g (gy g


.group gy .group gy
gy J gy J
_huszone) gy (e J: _huszone) gy (e J:
száze) gy (edik J: száze) gy (edik J:
védje) gy (straté J védje) gy (straté J
na) gy (sor J


.group h .group h
h h h h
sz) í (veré i: sz) í (veré i:
sz) í (verő i: sz) í (verő i:
sz) í (vevő i: sz) í (vevő i:
expressz) í (v i:


.group j .group j
j j j j
nem-lts n'Em||_!'Ellt,e:,ES //without this rule Espeak spokening the nem LTS text with one word, because general in hu_list have a $combine attribute the nem word. nem-lts n'Em||_!'Ellt,e:,ES //without this rule Espeak spokening the nem LTS text with one word, because general in hu_list have a $combine attribute the nem word.


n'Em _!'Ellt,e:,ES n'Em _!'Ellt,e:,ES
porcelá) n (ny n


.group o .group o
o o o o
juventu) ssz s: //a radio station name juventu) ssz s: //a radio station name
farka) ssz (em Ss farka) ssz (em Ss
villamo) ssz (ék Ss villamo) ssz (ék Ss
titko) ssz (olgál Ss
titko) ssz (olg Ss
karo) ssz (ék Ss karo) ssz (ék Ss
hú) ssz (elet Ss hú) ssz (elet Ss
vörö) ssz (em Ss vörö) ssz (em Ss
esé) ssz (erű Ss esé) ssz (erű Ss
webe) ssz Ss webe) ssz Ss
beleve) ssz (en s: beleve) ssz (en s:
tengeré) ssz (ürk s:
hirdeté) ssz S|s
_ki) ssz (éri S|s
_ki) ssz (ersz S|s
_fűté) ssz S|s
_kontaktu) ssz S|s
_dió) ssz (ilá S|s
_konszenzu) ssz S|s
forgá) ssz (er S|s
mérkőzé) ssz S|s
művelődé) ssz S|s
_nyomá) ssz (in S|s
_oko) ssz S|s
oktatá) ssz (er S|s
pszichózi) ssz S|s
realitá) ssz S|s
szerződé) ssz S|s
születé) ssz (ám S|s
tölté) ssz (ak S|s
utazá) ssz (er S|s
zsarolá) ssz (er S|s
dőlé) ssz (ab S|s





.group sz .group sz
diva) t (cirk t diva) t (cirk t
álla) t (cirk t álla) t (cirk t
szen) t (szob t szen) t (szob t
koncer) t (jeg t


.group tj .group tj
C) tj c C) tj c

+ 60
- 3
dictsource/hy_list View File

// This file is UTF8 encoded // This file is UTF8 encoded
// Spelling-to-phoneme words for Armenian // Spelling-to-phoneme words for Armenian


// ?1 West Armenian

// names of letters // names of letters
_ա aIb _ա aIb
բ ben բ ben
կ ken կ ken
հ ho հ ho
ձ dza ձ dza
ղ r"ad
ղ r"at
ճ ce ճ ce
մ men մ men
յ hi յ hi
չ tSa չ tSa
պ pe պ pe
ջ dZe ջ dZe
ռ **a
ռ R2a
ս se ս se
վ vev վ vev
տ tyn տ tyn
ր re ր re
ց tso
ց ts#o
ւ hyn ւ hyn
փ p#yr փ p#yr
ք k#e ք k#e
և jev
_օ o _օ o
ֆ fe ֆ fe


e e e e
f ef f ef


// symbols
$ dolar
% տոկոս $text
* աստղանիշ $text
+ գումարած $text
= հավասար $text


_՝ b'ut#
_՞ harts#ak'an
_՛ S'eSt
_։ verdZak'et // U+0589
_: verdZak'et
_, storak'et
_. midZak'et
_֊ jent#amn'a // hyphen
_՜ bats#akantSut#j'un
_՟ pat'iw




// numbers // numbers




// function words // function words
ես $u+ // pronouns
դու $u+
եք $u+
Դուք $u+
նա $u+
այն $u+
մենք $u+
նրանք $u+

դուք $u+
ենք $u+
են $u+

այդ $u+
այս $u+
դա $u+
որ $u+
էր $u+

մի $u+
է $u+

հետ $u+ // prepositions

եվ $u+ // and
իսկ $u+ $brk // and, but
կամ $u+ // or
որը $u+ // which
կարող $u+ // can






// exceptions
ով ov
ովքեր ovk#er

+ 11
- 9
dictsource/hy_rules View File

// (consonants are changed for Armenian-West in the voice file "hy-west") // (consonants are changed for Armenian-West in the voice file "hy-west")
// This file is UTF-8 encoded // This file is UTF-8 encoded


// ?1 West Armenian

.L01 բ գ թ կ պ տ ք .L01 բ գ թ կ պ տ ք
.L02 ու այ իւ իյ ոյ // other vowel sounds
.L02 ու այ իւ իյ ոյ ա ե ը ի ո օ // vowel sounds


// ligature // ligature
.replace .replace


.group ա .group ա
ա a ա a
այ aI
այ (K aI
այ (_ a այ (_ a


.group բ .group բ
.group է .group է
է e է e
էօ W էօ W
էյ eI
էյ (K eI


.group ը .group ը
ը @ ը @
ի i ի i
իւ y իւ y
իւ (_ iv իւ (_ iv
իյ i@
իյ (K i@


.group լ .group լ
լ l լ l
L02) մ (_ m L02) մ (_ m


.group յ .group յ
յ h // ?? [j]
_) յ h // ?? [j]
_) յ (C h@ _) յ (C h@
յ j


.group ն .group ն
ն n ն n
_) ջ (C dZ@ _) ջ (C dZ@


.group ռ .group ռ
ռ **
_) ռ (C **@
ռ R2
_) ռ (C R2@


.group ս .group ս
ս s ս s


.group ր .group ր
ր r ր r
L02) ր (L02 *
_) ր (C r@ _) ր (C r@
C) ր (_ @r C) ր (_ @r
L02) ր (_ r L02) ր (_ r
ֆ f ֆ f
_) ֆ (C f@ _) ֆ (C f@


.group
$ dol@





+ 16
- 1
dictsource/nl_list View File

_t te: _t te:


_cap h'o:fdlEt@r _cap h'o:fdlEt@r
_sub s'8pskrIpt||
_sup s'yp@rskrIpt||
_?A l'Et@r _?A l'Et@r
_?? s'imbo:l _?? s'imbo:l


_7X z'e:v@nt@x _7X z'e:v@nt@x
_8X t'Axt@x _8X t'Axt@x
_9X n'e:g@nt@x _9X n'e:g@nt@x
_0C h'OndErt
_0C h'Ond@rt
_0M1 d'WyzEnt _0M1 d'WyzEnt
_0M2 m'iljun _0M2 m'iljun
_0M3 m'iljArt _0M3 m'iljArt
loochen $alt loochen $alt
oefen $alt oefen $alt
open $alt open $alt
reden $alt
regen $alt regen $alt
reken $alt reken $alt
schepen $alt schepen $alt
water $alt water $alt
wedijver $alt wedijver $alt
wegwijzer $alt wegwijzer $alt
weiger $alt
wester $alt wester $alt
wijder $alt wijder $alt
wilder $alt wilder $alt
gispel $alt gispel $alt
gniffel $alt gniffel $alt
goochel $alt goochel $alt
googel $alt
gorgel $alt gorgel $alt
grabbel $alt grabbel $alt
grendel $alt grendel $alt
accessoire aksEsw'ar@ accessoire aksEsw'ar@
accessoires aksEsw'ar@s accessoires aksEsw'ar@s
actiepunt Aksip8nt actiepunt Aksip8nt
actieve Akt'iv@
adhesie Ath'e:zi adhesie Ath'e:zi
agenda $2 agenda $2
aldus Ald'8s aldus Ald'8s
desillusie dEsIlyzi desillusie dEsIlyzi
dieet $2 dieet $2
diesel diz@l diesel diz@l
diner din'e:
//discussie $2 //discussie $2
divers div'Ers divers div'Ers
diftongering dIft,ON'e:rIN diftongering dIft,ON'e:rIN
elfstedentocht ,Elf'ste:d@ntoQt elfstedentocht ,Elf'ste:d@ntoQt
embouchuur A~buS'yr // embouchure embouchuur A~buS'yr // embouchure
enorm $2 enorm $2
enquête A~k'Et@ $alt2
erosie e:r'o:zi erosie e:r'o:zi
eucharistie $4 eucharistie $4
explosie $2 explosie $2
invasie $2 invasie $2
januari $3 januari $3
kadaster $2 kadaster $2
leesregel le:sre:Q@l
lunch l8nS
lunches l8nS@s
mangat $alt3 mangat $alt3
materie ma:t'e:ri materie ma:t'e:ri
maatregel ma:tre:Q@l $alt2 maatregel ma:tre:Q@l $alt2
partijvoorzitters $2 partijvoorzitters $2
periferie pI:rifI:r'i periferie pI:rifI:r'i
pistache pist'AS pistache pist'AS
privilege privil'e:Z@ $alt2
proces $2 proces $2
projectielen $3 projectielen $3
renaissance rEne:s'A~s@ renaissance rEne:s'A~s@
sms'jes EsEm'Es_j@s sms'jes EsEm'Es_j@s
spektakel $2 spektakel $2
tegennatuur $4 tegennatuur $4
tralie $1
travestie $3 travestie $3
verderop $3 verderop $3
vergezicht vErQ@zIxt
verre vEr@ verre vEr@
verrekijker vEr@kEIk@r verrekijker vEr@kEIk@r
verste vErst@ verste vErst@
verte vErt@ verte vErt@
volledig $2 volledig $2
voordeel $1
vrouwengek $alt3 vrouwengek $alt3
waarschijnlijk $2 waarschijnlijk $2
wanen v#a:n@n wanen v#a:n@n

+ 64
- 12
dictsource/nl_rules View File



@@C) a (_ =a: @@C) a (_ =a:
_) aan (@P3 'a:n _) aan (@P3 'a:n
@) aar (_S3 a:r
@) aard (_S4 a:rt
&) aar (_S3 a:r
&) aard (_S4 a:rt
aa (rd_ 'a: aa (rd_ 'a:
aa (C_ 'a: aa (C_ 'a:
z) aa (m_ a: z) aa (m_ a:
t) a (bleau a: t) a (bleau a:
@) abel (_ 'a:b@l @) abel (_ 'a:b@l
@) abele (_ 'a:b@l@ @) abele (_ 'a:b@l@
@) ace (_ e:s // ?? interface
m) ach (in %a:S m) ach (in %a:S
_) actie (@P5 'Aksi
_) af (C@P2 'Af _) af (C@P2 'Af
_) affich %AfiS _) affich %AfiS
age (_ 'a:Z@ age (_ 'a:Z@
baan ba:n baan ba:n
&) baar (_S4 =ba:r &) baar (_S4 =ba:r
&) bare (_S4 =ba:r@ &) bare (_S4 =ba:r@
_) bedrijfs (@P8 b@dr'EIfs
_) belasting (@P9 b@l'AstIN
_) beleids (@P7 b@l'EIts
_) bij (C@P3 b'EI _) bij (C@P3 b'EI
bij (zond b%i bij (zond b%i
_) bijeen bEI'e:n _) bijeen bEI'e:n
_) binnen (P6 b'In@n _) binnen (P6 b'In@n
_) boek (@P4 b'uk
_) boven (P5 b'o:v@n _) boven (P5 b'o:v@n
_) braille (@P7 br'Aj@
_) brand br'And _) brand br'And
_) buiten (P6 b'Wyt@n _) buiten (P6 b'Wyt@n
_) buurt (@@P5 b'yrt // buurtbewoner _) buurt (@@P5 b'yrt // buurtbewoner
_) be (zem be: _) be (zem be:
_) be (zig be: _) be (zig be:
_) beu bY: _) beu bY:
_) bezoekers (@P9 b@z'uk@rs




.group c .group c
@) ci (ë S @) ci (ë S
ci (o S ci (o S
ck k ck k
ces (_ s'Es
coach ko:tS coach ko:tS

_) computer (@P8 kOmpj'ut@r
_) congres kOnQr'Es _) congres kOnQr'Es
_) concentratie (@P12 kOnsEntr'a:tsi
co (ncert k%O co (ncert k%O




&) end (_ @nd &) end (_ @nd
&) ende (_S1 @ &) ende (_S1 @
&) enden (_S2 @n &) enden (_S2 @n
eden e:d@n
eden (_ e:d@n // ??
@) ent (_ 'Ent @) ent (_ 'Ent
@) ent (e_ 'Ent @) ent (e_ 'Ent
@) ent (en_ 'Ent @) ent (en_ 'Ent
@z) es (_S1 s @z) es (_S1 s
@) es (_S2qd 'Es // double the previous vowel @) es (_S2qd 'Es // double the previous vowel
@) es (_$w_alt2S1 s // just remove 's' @) es (_$w_alt2S1 s // just remove 's'
@) e (s_$p_alt2+S1 s
KAC) es (_S2e @s KAC) es (_S2e @s
mb) es (_S1 s mb) es (_S1 s
nd) es (_S1 s nd) es (_S1 s
@) eur (_ 'Y:r @) eur (_ 'Y:r


&) e (nB@ E2 &) e (nB@ E2
&) e (ntig @
_p) e (nibel e: _p) e (nibel e:
id) e (nt E id) e (nt E
pres) e (nt E pres) e (nt E
er (ij_ @r er (ij_ @r
tol) er (abel @r tol) er (abel @r
mis) er (abel @r mis) er (abel @r
hond) er (d_ @r
_) erger ErQ@r // ergeren _) erger ErQ@r // ergeren
&) era (_ @ra: &) era (_ @ra:
@) er (aar_ @r @) er (aar_ @r
&) er (C@ E2r &) er (C@ E2r


.group ê
ê E


.group f .group f
f f f f
@) gi (eus Z @) gi (eus Z
@) gi (euz Z @) gi (euz Z
reli) gi (eu Qij reli) gi (eu Qij
_) goog (el gu:g


.group ge .group ge
_) ge (@P2 Q@ _) ge (@P2 Q@
ge (bied Q@ ge (bied Q@
_) gebruikers (@P10 Q@br'Wyk@rs
_) gee Qe: _) gee Qe:
_) gei QEI _) gei QEI
gener (aal Q,e:n@r gener (aal Q,e:n@r
_) gelijk Q@lEIk _) gelijk Q@lEIk
_) ge (lC QE _) ge (lC QE
_) ge (rC QE _) ge (rC QE
_) ge (lenL02 Qe:
_) ge (tenL02 Qe:
_) geu QY: _) geu QY:
_) ge (ven Qe: _) ge (ven Qe:
_) ge (ver Qe: _) ge (ver Qe:
_) herinn h%ErIn // herinneren _) herinn h%ErIn // herinneren
_) hersen h'Ers@n _) hersen h'Ers@n
&) heid (_S4 hEIt &) heid (_S4 hEIt
_) honden (@P6 h'Ond@n
_) hulp (@@P4 h'8lp _) hulp (@@P4 h'8lp




&) ika (_ =ika: &) ika (_ =ika:
&) iko (_ =iko: &) iko (_ =iko:
_) in (C@P2 'In _) in (C@P2 'In
// _) in (gP2 'In
_) in (do In _) in (do In
ine (_ 'in@ ine (_ 'in@
ines (_ 'in@s ines (_ 'in@s
_) inn (@P2 'I // ?? inneren
_) inter Int@r
io (nage iO io (nage iO
io (de_ i'o: io (de_ i'o:
iodes (_ i'o:d@s iodes (_ i'o:d@s
@) isme (_ 'Ism@ @) isme (_ 'Ism@
@) ist (_ 'Ist @) ist (_ 'Ist
@) isten (_ 'Ist@n @) isten (_ 'Ist@n
_) inn (@P2 'I // ?? inneren


.group j .group j
j j j j
_) jaar (@P4 j'a:r
jaar (lijk ja:r
jou (rna Zu jou (rna Zu




k) k k) k


_) kale (nde ka:l'E _) kale (nde ka:l'E
_) kantoor (@P7 kAnt'o:r
_) keuze (@P5 k'Y:z@
_) kinder (@P6 k'Ind@r
kokkerel kOk@r'El kokkerel kOk@r'El
_) koning k'o:nIN // in compounds _) koning k'o:nIN // in compounds
_) koningin ko:nIQ'In _) koningin ko:nIQ'In
&) lijker (_S6 l@k@r &) lijker (_S6 l@k@r
&) lijkere (_S7 l@k@r@ &) lijkere (_S7 l@k@r@
&) lijkheid (_S8 l@khEIt &) lijkheid (_S8 l@khEIt
&) lijkheden (_S9 l@khe:d@n
// &) lijks@ (_ l@ks@
&) lijkst (_S6 l@kst &) lijkst (_S6 l@kst
&) lijkste (_S7 l@kst@ &) lijkste (_S7 l@kst@

&) laan (_S4 la:n &) laan (_S4 la:n
_) lange (@P5 laN@ _) lange (@P5 laN@
_) liefdes (@P7 l'ifd@s
@) loog (_ lo:x @) loog (_ lo:x
@) loos (_S4 lo:s @) loos (_S4 lo:s
@) loze (_S4 lo:z@ @) loze (_S4 lo:z@


management ma:nIdZm@nt management ma:nIdZm@nt
_) mee (@P3 m'e: _) mee (@P3 m'e:
_) mee (rC mI:
menu (_ m@ny menu (_ m@ny
_) mi (cro mi _) mi (cro mi
_) mi (s@ m%I _) mi (s@ m%I
_) mis (loP3 m'Is _) mis (loP3 m'Is
_) mis (tA m'Is _) mis (tA m'Is
_) misver (@ m'Isf@r _) misver (@ m'Isf@r
_) muziek (@P6 myz'ik


.group n .group n
n n n n
_) na (C@N n'a: _) na (C@N n'a:
_) na (C% nA _) na (C% nA
_) na (cht nA _) na (cht nA
_) najaars (@P7 n'a:ja:rs
_) narci (s n%ArsI _) narci (s n%ArsI
_) na (rc n%A _) na (rc n%A
_) na (der na: _) na (der na:
na (vig n%a: na (vig n%a:
_) na (vr na: _) na (vr na:
_) na (volg@ n%a: _) na (volg@ n%a:
_) noord (@P5 no:rd
_) nieuws (@P6 n'iws _) nieuws (@P6 n'iws
@@) nis (_S3 nIs @@) nis (_S3 nIs
@@) nisen (_S5 nIs@n @@) nisen (_S5 nIs@n
_) noord (@P5 no:rd
_) notitie (@P7 no:t'itsi




.group o .group o
tr) ou (vail u tr) ou (vail u
ouve (rtu uvE ouve (rtu uvE
_) over (@P4 ,o:v@r _) over (@P4 ,o:v@r
_) overigen o:v@r@Q@n
_) overheid 'o:v@rhEIt
t) ou (r u: t) ou (r u:




C) r (A r C) r (A r
rr *r rr *r


recherch r@SErS
revanch r@vA~nS
route rut@ // route(s) route rut@ // route(s)


.group re .group re
_) re (geren r@ _) re (geren r@
_) re (geer r@ _) re (geer r@
_) regel re:Q@l
_) re (cent r@ _) re (cent r@
_) re (cept r@ _) re (cept r@
_) re (ceptief re: _) re (ceptief re:
_) re (ces r@
_) re (clam r@ _) re (clam r@
_) register r@Q'Ist@r
reme (die r@m'e:
_) re (serve_ r@ _) re (serve_ r@
_) re (cord re' _) re (cord re'
_) regering r@Q'I:rIN
repre (saill re:pre: repre (saill re:pre:
recherch r@SErS
revanch r@vA~nS




.group s .group s
@) ssi (o S @) ssi (o S
CAr) sie (_ =zi CAr) sie (_ =zi


_) stads (@P5 st'Ats
_) stage (@P5 st'a:Z@
_) standaard (@P9 st'Anda:rt _) standaard (@P9 st'Anda:rt
_) start (@P5 st'Art
@) straat (_S6 stra:t @) straat (_S6 stra:t
_vre) s (e s _vre) s (e s


_) ver (@P3 v@r _) ver (@P3 v@r
_) ver (sie_ vEr _) ver (sie_ vEr
_) verder vErd@r _) verder vErd@r
_) verge (@P5 vErg@
_) verge (le v@rQ'e:
_) verkeers (@P8 v@rk'I:rs
// _) verge (@P5 vErg@
// _) verge (le v@rQ'e:
_) voorjaars (@P9 v'O:rja:rs
_) voort (@P5 v'O:rt _) voort (@P5 v'O:rt
_) vrijwilligers (@P13 vrEIv#'Il@Q@rs




.group w .group w
_) wanstaltig v#Anst'Alt@Q _) wanstaltig v#Anst'Alt@Q
_) wantrouwig v#Antr'VU@Q _) wantrouwig v#Antr'VU@Q
_) wanvoeglijk v#Anv'uxl@k _) wanvoeglijk v#Anv'uxl@k
_) water (@P5 v#'a:t@r
_) weers (@P5 v#'I:rs
_) weg (@P3 v#'EQ _) weg (@P3 v#'EQ
_) weg (en v#e:Q _) weg (en v#e:Q
_) weg (e_ v#e:Q // bewegelijk _) weg (e_ v#e:Q // bewegelijk
_) werk (@P4 v#'Erk
_) west (@P4 v#Est _) west (@P4 v#Est
_) wr vr
_) woon (@P4 v#'o:n
_) wr (@ vr




.group x .group x

+ 6
- 6
dictsource/pa_rules View File

ੱ) ਯ (_ j: ੱ) ਯ (_ j:


.group ਰ .group ਰ
RV
ਰ (B R
@) ਰ (_ R
ੱ) ਰ R:V
ੱ) ਰ (B R:
ੱ) ਰ (_ R:
rV
ਰ (B r
@) ਰ (_ r
ੱ) ਰ r:V
ੱ) ਰ (B r:
ੱ) ਰ (_ r:


.group ਲ .group ਲ
ਲ lV ਲ lV

+ 2
- 2
dictsource/pl_list View File

x iks x iks
y 'igREk y 'igREk
_z zEt _z zEt
ż Z;Et
ź ZEt
ż ZEt
ź Z;Et


ä $accent ä $accent
ö $accent ö $accent

+ 205
- 107
dictsource/pt_list View File



// accent names // accent names
_lig ligad'u*& _lig ligad'u*&
_acu &g'udU
_ac2 &g'udUd'uplU
_acu ag'udU
_ac2 ag'udUd'uplU
_brv bR'Evi _brv bR'Evi
_ced sedZ'ilj& _ced sedZ'ilj&
?1 _ced syd'il^& ?1 _ced syd'il^&
x Sis# x Sis#


_cap maI'uskulU _cap maI'uskulU
_sub ||subskR'itU
_sup ||sob*eskR'itU
_?A l'etR&_ _?A l'etR&_
_?? s'imbolU_ _?? s'imbolU_
_#32 esp'asU _#32 esp'asU
+ maIs# $max3 + maIs# $max3
% pors'eINtU $max3 % pors'eINtU $max3
& _'e_ & _'e_
@ &x'ob&
@ ax'ob&
¤ 'eU*U ¤ 'eU*U
€ 'eU*U € 'eU*U
£ l'ibR&
§ p&*'agRafU § p&*'agRafU




_\ b,ax&,iNvertS'id& _\ b,ax&,iNvertS'id&
_] f,ES&kowS'etSi _] f,ES&kowS'etSi
_^ s,irku~Nfl'Eksu _^ s,irku~Nfl'Eksu
_´ as'eINtu,ag'udU
__ s,ublin^'adu __ s,ublin^'adu
_` gR'avi
_` gR'avi
_{ ,abRiS'avi _{ ,abRiS'avi
?1 _| b,ax&v,ertSik'al ?1 _| b,ax&v,ertSik'al
?2 _| b,ax&v,ertSik'aU ?2 _| b,ax&v,ertSik'aU
_¿ ,iNtex,ogas,&U~,iNvertS'id& _¿ ,iNtex,ogas,&U~,iNvertS'id&


_" 'abRi;'asp&||d'upl&s# _" 'abRi;'asp&||d'upl&s#
_º Oz'in^U
_ª az'in^U
?1 º O*@-din'almaskul'i~nU
?2 º o*@-dZin'aUmaskul'i~nU
?1 ª O*@-din'alfemin'i~nU
?2 ª o*@-dZin'aUfemin'i~nU
° gR'aU ° gR'aU




?2 _9X nov'eINt& ?2 _9X nov'eINt&
_1C0 s'eIN _1C0 s'eIN
?1_0C s'eINtus# ?1_0C s'eINtus#
?2_0C s'eINtUs#
?2_0C s'eINtUz
_1C s'eINtu _1C s'eINtu
?1_2C duz'eINtus# ?1_2C duz'eINtus#
?2_2C duz'eINtUz ?2_2C duz'eINtUz
?1_3C tryz'eNtus#
?2_3C tRez'eNtUz
?1_3C tryz'eINtus#
?2_3C tRez'eINtUz
?1_5C kin^'eINtus# ?1_5C kin^'eINtus#
?2_5C kin^'eINtUz ?2_5C kin^'eINtUz
?1_0M1 m'il_ ?1_0M1 m'il_
usb $abbrev usb $abbrev




dr $dot
dra $dot
mr $dot
mrs $dot
prof pr'Of $dot
dr dowtor $dot
dra dowt'o*& $dot
mr m'ister $dot
mrs m'irsys $dot
prof pR'Of $dot
profº pR,ofes'or profº pR,ofes'or
profª pR,ofes'o*& profª pR,ofes'o*&
engº eInZen^'eI*U
engª eInZen^'eI*&
nº n'u~me*U
sr $dot sr $dot
?1 sra ,Es;'Errj'a $dot ?1 sra ,Es;'Errj'a $dot
?2 sra $dot ?2 sra $dot
te $u $verbf te $u $verbf
nos $u $nounf nos $u $nounf
la $u la $u
lo $u
lo lU $u
las $u las $u
los $u los $u
se $u se $u
desse $u+ $nounf desse $u+ $nounf
desta $nounf desta $nounf
nesse n'esy $u+ $nounf nesse n'esy $u+ $nounf
aquele &k'ely $u+ $nounf // that
aquela $u+ $nounf aquela $u+ $nounf
daquele d&k'ely $u+ $nounf
aquele $alt2 $nounf
daquela $u+ $nounf daquela $u+ $nounf
daquele $alt2 $nounf
que $u // pronunciation is in pt_rules que $u // pronunciation is in pt_rules


// possessive adjectives // possessive adjectives


// prepositions // prepositions
de $u $nounf // of,from de $u $nounf // of,from
do $u $nounf
do du $u $nounf
da $u $nounf da $u $nounf
dos $u $nounf dos $u $nounf
das $u $nounf das $u $nounf
dumas $u $nounf dumas $u $nounf


em $u $noun // in,on,at em $u $noun // in,on,at
no nu $u $nounf
no nU $u $nounf
na $u $nounf na $u $nounf
num $u $nounf num $u $nounf
numa $u $nounf numa $u $nounf
às ,a:s $nounf às ,a:s $nounf


para $u // for,to para $u // for,to
pro $u $nounf
pro pRU $u $nounf
pra $u $nounf pra $u $nounf
pros $u $nounf pros $u $nounf
pras $u $nounf pras $u $nounf
// conjunctions // conjunctions
?1 e i $u // and ?1 e i $u // and
?2 e i $u // and ?2 e i $u // and
se $u+ $verbf // if
se $u+ // if




?2 mas $u // but ?2 mas $u // but
pudemos $u+ pudemos $u+
puderam $u+ puderam $u+


poderei $u3+
poderá $u3+
poderemos $u+
poderão $u+
poderei p%ode*eI $u+
poderá p%ode*a $u+
poderemos p%ode*'emUs $u+
podeão p%ode*&U~ $u+




// ir - to go (used to make future tense) // ir - to go (used to make future tense)
abacaxi abakaSy abacaxi abakaSy
abordo $alt abordo $alt
aborto $alt $verb aborto $alt $verb
absorta $alt2
acerto $alt2 $noun acerto $alt2 $noun
acertos $alt2 acertos $alt2
acocho $alt2 $noun
acordo $alt $verb acordo $alt $verb
acervo $alt2 acervo $alt2
adepto $alt adepto $alt
adorno $alt $verb adorno $alt $verb
aeroporto $alt2 aeroporto $alt2
aeroportos $alt aeroportos $alt
albatrozes $alt
alcateia $alt alcateia $alt
alcova $alt2 alcova $alt2
alegro $alt2 $noun
alferes $alt alferes $alt
algozes $alt
almoço $alt $verb almoço $alt $verb
ameba $alt ameba $alt
amores $alt2 amores $alt2
amorno $alt
amuleto $alt2
ampere $alt
ampola $alt2
ampulheta $alt2
andorra $alt2
antonieta $alt2 antonieta $alt2
apego $alt2 $noun apego $alt2 $noun
apelo $alt2 $noun apelo $alt2 $noun
apoio $alt $verb apoio $alt $verb
arredores $alt arredores $alt
arremesso $alt2 $noun arremesso $alt2 $noun
arrocho $alt2 $noun
arroto $alt2 $noun
arroz $alt2 arroz $alt2
assembleia $alt assembleia $alt
assopro $alt2 $noun
ateia $alt ateia $alt
aterro $alt2 aterro $alt2
aterro $alt $verb aterro $alt $verb
atmosfera $alt
atrozes $alt
autora $alt2 autora $alt2
avesso $alt2 avesso $alt2
axé aSE axé aSE
azeda $alt $verb azeda $alt $verb
azedo $alt $verb azedo $alt $verb
bairro b'aIxU
baqueta $alt2 baqueta $alt2
banqueta $alt2
banquete $alt2
bastonete $alt2
beco $alt2 beco $alt2
besta $alt2 besta $alt2
bilhete $alt2 bilhete $alt2
bissulfeto $alt2
boca $alt2 boca $alt2
boceta $alt2 boceta $alt2
bochecha $alt2
bofe $alt
bojo $alt2 bojo $alt2
boleia $alt boleia $alt
bolero $alt bolero $alt
borra $alt2 $noun borra $alt2 $noun
bosque $alt bosque $alt
boto $alt2 $noun boto $alt2 $noun
boxe $alt
boxe $alt
brejo $alt brejo $alt
bromelha $alt bromelha $alt
broto $alt2 $noun
cabelo $alt2 cabelo $alt2
cabresto $alt2 cabresto $alt2
cacete $alt2 cacete $alt2
cachorra $alt2 cachorra $alt2
caderneta $alt2 caderneta $alt2
cadete $alt2 cadete $alt2
cãibra k'&~IbR&
caibro k'aIbRU
caixeta $alt2
camelha $alt camelha $alt
camelo $alt2 camelo $alt2
caminhonete $alt
camiseta $alt2 camiseta $alt2
canaleta $alt2
canhoto $alt2
cantora $alt2 cantora $alt2
capacete $alt2 capacete $alt2
caractere $alt caractere $alt
carbureto $alt2 carbureto $alt2
careta $alt2 careta $alt2
carrapeta $alt2
carreta $alt2 carreta $alt2
carroça $alt carroça $alt
casebre $alt casebre $alt
cateto $alt2 cateto $alt2
catorze $alt2 catorze $alt2
cebola $alt2 cebola $alt2
cedro $alt
cefaleia $alt cefaleia $alt
cerebelo $alt2
centopeia $alt centopeia $alt
cerca $alt cerca $alt
cerca $alt2 $noun cerca $alt2 $noun
cerco $alt $verb cerco $alt $verb
chamego $alt2
cerda $alt
cetro $alt
chamego $alt2 $verb
chaveta $alt2
chefe $alt chefe $alt
checam $alt checam $alt
choro $alt2 $noun choro $alt2 $noun
chupeta $alt2 chupeta $alt2
clamores $alt2 clamores $alt2
clero $alt clero $alt
cloreto $alt2
coche $alt2
coco $alt2 coco $alt2
cofre $alt cofre $alt
coice $alt2 coice $alt2
colabore $alt
colete $alt2 colete $alt2
colchete $alt2 colchete $alt2
colher $alt $noun colher $alt $noun
conforto $alt $verb conforto $alt $verb
console $alt2 $noun console $alt2 $noun
consolo $alt2 $noun consolo $alt2 $noun
constroem $alt
controle $alt2 $noun controle $alt2 $noun
controles $alt2 controles $alt2
controles $alt $verb controles $alt $verb
coreto $alt2 coreto $alt2
corneta $alt2 corneta $alt2
cornos $alt cornos $alt
coro $alt2
coro $alt $verb
corpos $alt corpos $alt
corto $alt corto $alt
corveta $alt2 corveta $alt2
corvos $alt corvos $alt
costeleta $alt2
coto $alt2 coto $alt2
cotovelo $alt2 cotovelo $alt2
cratera $alt cratera $alt
crede $alt2 crede $alt2
credo $alt
crepe $alt crepe $alt
decore $alt decore $alt
decoro $alt2 $noun
degelo $alt2 degelo $alt2
desapego $alt2 $noun desapego $alt2 $noun
descordo $alt descordo $alt
desemprego $alt2 desemprego $alt2
desemprego $alt $verb desemprego $alt $verb
desespero $alt2 $noun
desespero $alt2
desespero $alt $verb
desfecho $alt2 desfecho $alt2
desmantelo $alt2 $noun desmantelo $alt2 $noun
despojo $alt2 $noun
despojos $alt
desporto $alt2 desporto $alt2
desportos $alt desportos $alt
desprezo $alt2 $noun desprezo $alt2 $noun
diarreia $alt diarreia $alt
diego $alt2 diego $alt2
discordo $alt discordo $alt
dobro $alt2 $noun
dissabores $alt2
dispneia dZIspyn'EI&
dobro $alt2
dobro $alt $verb
doce $alt2 doce $alt2
doutora $alt2 doutora $alt2
droga $alt
doze $alt2
dueto $alt2 dueto $alt2
elixir eliSir elixir eliSir
emprego $alt2 $noun emprego $alt2 $noun
enredo $alt $verb enredo $alt $verb
enrosco $alt $verb enrosco $alt $verb
enterro $alt2 $noun enterro $alt2 $noun
enumerem $alt
entorto $alt
entroso $alt
envelope $alt envelope $alt
envolto $alt2
enxaqueca $alt2 enxaqueca $alt2
enxerto $alt2 $noun enxerto $alt2 $noun
epopeia $alt epopeia $alt
erro $alt $verb erro $alt $verb
esboço $alt $verb esboço $alt $verb
escopeta $alt2 escopeta $alt2
escova $alt2 $noun
escovas $alt2
escore $alt
escova $alt2
escova $alt $verb
escovo $alt escovo $alt
escroto $alt2
esforço $alt $verb esforço $alt $verb
esforços $alt esforços $alt
esgoto $alt2 esgoto $alt2
esposa $alt2 esposa $alt2
esqueleto $alt2 esqueleto $alt2
estilete $alt2 estilete $alt2
estrela $alt2
estrofe $alt
estorno $alt $verb estorno $alt $verb
estorvo $alt $verb estorvo $alt $verb
estrela $alt2
estrofe $alt
estrogonofe $alt
eta $alt2
etiqueta $alt2 etiqueta $alt2
europa $alt europa $alt
europeia $alt europeia $alt
exagero $alt $verb exagero $alt $verb
explore $alt explore $alt
faceta $alt2 faceta $alt2
fantoche $alt
falangeta $alt2
farofa $alt farofa $alt
farolete $alt2
farolete $alt2
febre $alt febre $alt
fera $alt fera $alt
feitora $alt2 feitora $alt2
ferozes $alt
fezes $alt fezes $alt
filete $alt2 filete $alt2
?1 fixe fiSy ?1 fixe fiSy
flerte $alt2 $noun
foda $alt2 $verb foda $alt2 $verb
fodo $alt2
fogos $alt fogos $alt
foguete $alt2 foguete $alt2
foice $alt2 foice $alt2
fora $alt fora $alt
fora $alt2 $verb fora $alt2 $verb
forca $alt2 forca $alt2
força $alt2 $noun
forças $alt2
força $alt2
força $alt $verb
forço $alt forço $alt
formos $alt2 formos $alt2
forro $alt $verb forro $alt $verb
frevo $alt2 frevo $alt2
fulgores $alt2 fulgores $alt2
galera $alt galera $alt
galeto $alt2
galhofa $alt
galileia $alt galileia $alt
gameta $alt2
garçonete $alt2
gangorra $alt2
geleia $alt geleia $alt
gelo $alt2 gelo $alt2
gelo $alt $verb gelo $alt $verb
genebra $alt genebra $alt
gesso $alt2 gesso $alt2
golpe $alt
gloso $alt
gonorreia $alt gonorreia $alt
gol gow
golpe $alt
gorda $alt2 gorda $alt2
gorjeta $alt2
gosto $alt $verb gosto $alt $verb
gota $alt2 gota $alt2
governo $alt2 $noun
governo $alt2
governo $alt $verb
gozo $alt2 $noun gozo $alt2 $noun
graveto $alt2 graveto $alt2
grelha $alt grelha $alt
groselha $alt groselha $alt
grosso $alt2 grosso $alt2
grozo $alt $verb
groso $alt
gueto $alt2
hemorroida $alt hemorroida $alt
hoje $alt2 hoje $alt2
horrores $alt2 horrores $alt2
humores $alt2
ideia $alt ideia $alt
imberbe $alt
interesse $alt2 interesse $alt2
interesse $alt $verb interesse $alt $verb
jogo $alt2 $noun
iodo $alt2
ioga $alt
jereba $alt
jogo $alt2
jogo $alt $verb
jogos $alt
joguete $alt2 joguete $alt2
lagosta $alt2 lagosta $alt2
lambreta $alt2 lambreta $alt2
lanchonete $alt
lebre $alt lebre $alt
leitora $alt2
lembrete $alt2 lembrete $alt2
lepra $alt lepra $alt
leste $alt2 $verb leste $alt2 $verb
?2 lhe l^y
lingueta $alt2 lingueta $alt2
lisboeta $alt2
lodo $alt2
logro $alt
lopes $alt lopes $alt
macete $alt2 macete $alt2
maior $alt maior $alt
maleta $alt2 maleta $alt2
marionete $alt
maniçoba $alt
marieta $alt2
marreta $alt2 marreta $alt2
megera $alt megera $alt
melhor $alt melhor $alt
meta $alt $noun meta $alt $noun
meteoro $alt meteoro $alt
metro $alt metro $alt
mexa m'eS&
mexi meS'i
mexo m'eSU
minueto $alt2 minueto $alt2
miolo $alt2 miolo $alt2
miolos $alt miolos $alt
modelo $alt2 modelo $alt2
modelo $alt $verb modelo $alt $verb
moeda $alt moeda $alt
moem $alt
moem $alt
mofo $alt $verb mofo $alt $verb
molho $alt2 $noun molho $alt2 $noun
monera $alt monera $alt
mortos $alt mortos $alt
motora $alt2 motora $alt2
mui mwi mui mwi
muito mw'iNtU // -s is included as a suffix
muita mw'iNt&
mulher $alt
mulheres $alt
muleta $alt2
mureta $alt2 mureta $alt2
mutreta $alt2 mutreta $alt2
namoro $alt2 $noun namoro $alt2 $noun
nojo $alt2 nojo $alt2
novelo $alt2 novelo $alt2
novos $alt novos $alt
obstetra $alt
odisseia $alt odisseia $alt
onu $1 onu $1
olho $alt2 $noun
olhos $alt
olho $alt2 $noun
olhos $alt
onomatopeia $alt onomatopeia $alt
opereta $alt2 opereta $alt2
ordens $alt ordens $alt
ovos $alt ovos $alt
pachorra $alt2 pachorra $alt2
paexa paeSa paexa paeSa
paella pa'el^&
palacete $alt2 palacete $alt2
paleta $alt2
palheta $alt2 palheta $alt2
panfleto $alt2 panfleto $alt2
pangeia $alt pangeia $alt
pantera $alt pantera $alt
papoco $alt2 $noun
parede $alt2 parede $alt2
pastora $alt2 pastora $alt2
patinete $alt
peba $alt
pedra $alt pedra $alt
pela $alt $verb pela $alt $verb
pelo $alt2 pelo $alt2
pelo $alt $verb pelo $alt $verb
pereba $alt
peroba $alt
peseta $alt2
peso $alt $verb peso $alt $verb
piloto $alt2 $noun piloto $alt2 $noun
pintora $alt2 pintora $alt2
pior $alt pior $alt
pipoco $alt2 $noun
pirueta $alt2 pirueta $alt2
plaqueta $alt2 plaqueta $alt2
plateia $alt plateia $alt
plebeia $alt plebeia $alt
polca $alt polca $alt
pompeia $alt
porcos $alt porcos $alt
porque $alt2
porra $alt2 porra $alt2
porreta $alt2
porrete $alt2 porrete $alt2
porto $alt2 porto $alt2
portos $alt portos $alt
povos $alt povos $alt
poxa p'oS& poxa p'oS&
primavera $alt primavera $alt
primores $alt2
proso $alt
prosopopeia $alt prosopopeia $alt
proveta $alt2
quarteto $alt2 quarteto $alt2
queda $alt queda $alt
quede $alt2 quede $alt2
quitinete $alt
quinteto $alt2 quinteto $alt2
ramalhete $alt2
raposa $alt2 raposa $alt2
recomeço $alt $verb recomeço $alt $verb
reconstroem $alt
recordo $alt recordo $alt
recorto $alt recorto $alt
rede $alt2 rede $alt2
reforço $alt $verb reforço $alt $verb
reforços $alt reforços $alt
refresco $alt $verb refresco $alt $verb
rego $alt2 $noun
reitora $alt2 reitora $alt2
rejo $alt
relevo $alt2 $noun relevo $alt2 $noun
remoem $alt
remorso $alt remorso $alt
renovo $alt $verb renovo $alt $verb
retorno $alt $verb retorno $alt $verb
reuva x'EUv&
reuva x'EUv&
rigores $alt2 rigores $alt2
rixa x'iS&
rocha $alt
risoto $alt2
rock $alt rock $alt
roem $alt
roem $alt
rola $alt2 $noun rola $alt2 $noun
roleta $alt2
rolete $alt2
rolo $alt2 $noun rolo $alt2 $noun
rota $alt2 rota $alt2
rota $alt $noun rota $alt $noun
rubores $alt2
rumores $alt2 rumores $alt2
sabonete $alt2
sabores $alt2
saibro s'aIbRU
saleta $alt2 saleta $alt2
sarjeta $alt2 sarjeta $alt2
seborreia $alt seborreia $alt
suborno $alt $verb suborno $alt $verb
sufoco $alt2 $noun sufoco $alt2 $noun
sufocos $alt2 sufocos $alt2
sulfeto $alt2
sulfureto $alt2
super s'Uper
suporto $alt suporto $alt
suor swOr suor swOr
sutiã sutSi'&~N
tapete $alt2 tapete $alt2
temores $alt2 temores $alt2
tempero $alt2 $noun tempero $alt2 $noun
tenores $alt2
tenores $alt2
terrores $alt2 terrores $alt2
teta $alt2 teta $alt2
tetra $alt
tocha $alt
toga $alt toga $alt
topo $alt $verb
topo $alt2 $noun
torno $alt $verb torno $alt $verb
tornozelo $alt2 tornozelo $alt2
torre $alt2 $noun torre $alt2 $noun
torres $alt2 torres $alt2
torro $alt torro $alt
tortos $alt tortos $alt
toso $alt
transtorno $alt $verb
traqueia $alt traqueia $alt
travesso $alt2 travesso $alt2
tremores $alt2 tremores $alt2
treta $alt2
trevo $alt2 trevo $alt2
troco $alt2 $noun troco $alt2 $noun
tropa $alt tropa $alt
tumores $alt2 tumores $alt2
valeta $alt2 valeta $alt2
vanessa $alt2 vanessa $alt2
velozes $alt
vareta $alt2
vera $alt
verbete $alt2 verbete $alt2
violeta $alt2 violeta $alt2
violoncelo $alt violoncelo $alt
voga $alt voga $alt
vozes $alt
xarope $alt xarope $alt
xereta $alt2
zelo $alt2 $noun zelo $alt2 $noun
zorra $alt2 zorra $alt2




// foreign words // foreign words
?1 alt 'alt ?1 alt 'alt
?2 agosto &g'ostU
?2 agosto ag'ostU
?1 back b'Ek ?1 back b'Ek
?2 backup bEk'&p ?2 backup bEk'&p
?2 backups bEk'&ps ?2 backups bEk'&ps
beatle b'itow
beatles b'itows
blind bl'aind blind bl'aind
book buk book buk
?1 braille b:r'aily ?1 braille b:r'aily
?1 dj d,i:dZ'eI ?1 dj d,i:dZ'eI
?1 down d'a,wn ?1 down d'a,wn
?1 download d'a,wnl'oud ?1 download d'a,wnl'oud
?2 download daUNl'owd
?2 download daUNl'owd
?2 downloads daUNl'owds
?3 download dau~Nl'owd ?3 download dau~Nl'owd
drive dR'aivy
driver dR'aiver
drivers dR'aiveRs
drive dR'aIv
driver dR'aIver
drivers dR'aIveRs
?1 end 'end ?1 end 'end
?2 esc 'Esk ?2 esc 'Esk
?3 esc 'EskI ?3 esc 'EskI
laptop lEptOp laptop lEptOp
?1 line l'ain ?1 line l'ain
layout l'eI,aUt layout l'eI,aUt
?2 logo l'OgU
?2 login logiN
?1 lock l'Ok ?1 lock l'Ok
mail m'eIl mail m'eIl
mails m'eIls mails m'eIls
?1 readme r'i:dmi: ?1 readme r'i:dmi:
?1 sapi s,ap'i ?1 sapi s,ap'i
?1 scanner sk'En&r ?1 scanner sk'En&r
sky sk'ay
shake S'eIk
?1 shift S'ift ?1 shift S'ift
?1 scroll sk:r'ol ?1 scroll sk:r'ol
?1 site s'aIt ?1 site s'aIt
?2 site s'aItSi ?2 site s'aItSi
?2 shampoo S&mpu
?1 software s'Oft,w'Er- ?1 software s'Oft,w'Er-
símbolo s'imbolU símbolo s'imbolU
?4 símbolo s'iNbolU ?4 símbolo s'iNbolU
?2 software s'Oftwe@- ?2 software s'Oftwe@-
?1 space sp'eIsy ?1 space sp'eIsy
?2 space sp'eIs
?1 sporting sp'Ort,ing ?1 sporting sp'Ort,ing
tab t'aby tab t'aby
tablet t'ablet tablet t'ablet
?1 telemóvel t,El,Em'OvEl ?1 telemóvel t,El,Em'OvEl
?1 telemóveis t,El,Em'OveIs# ?1 telemóveis t,El,Em'OveIs#
?1 up &p ?1 up &p
?1 upload &pl'oud
update &pd'eIt
upgrade &pgR'eId
upload &pl'oud
?2 web w'Eb ?2 web w'Eb
?1 yahoo 'i,ah'u ?1 yahoo 'i,ah'u
?2 yahoo iah'u ?2 yahoo iah'u




// common person names // common person names
alan 'al@n
alan 'al@N
louis _^_FR louis _^_FR




// foreign product names // foreign product names
?1 access 'aks,Es ?1 access 'aks,Es
?1 adobe &d'Oby ?1 adobe &d'Oby
android &NdR'Oid
apple 'Epow apple 'Epow
chrome kR'owmi chrome kR'owmi
debian d'Ebj&~N debian d'Ebj&~N
?1 express ,Ekspr'Es ?1 express ,Ekspr'Es
espeak isp'i:k espeak isp'i:k
?1 espeakedit isp'i:kEd,it ?1 espeakedit isp'i:kEd,it
facebook feisybuk
facebook feIsybuk
?1 fedora _^_EN ?1 fedora _^_EN
firefox f'ai@fOks firefox f'ai@fOks
?1 front fr'ont ?1 front fr'ont
?1 jaws dZ'au:z ?1 jaws dZ'au:z
?1 linux l,in'uks ?1 linux l,in'uks
?2 linux l'inUks ?2 linux l'inUks
?1 live l'aiv
live l'aiv
?1 maker m'eIk&r- ?1 maker m'eIk&r-
mac mEk
?1 media m'Ed,i& ?1 media m'Ed,i&
?1 messenger m'Es&ndZ&r- ?1 messenger m'Es&ndZ&r-
?1 microsoft m,ik:r'os,Oft ?1 microsoft m,ik:r'os,Oft
?2 microsoft m'aIkRows'Oft ?2 microsoft m'aIkRows'Oft
?1 movie m'uvi ?1 movie m'uvi
?1 nero n'Eru ?1 nero n'Eru
/1 office 'Of,is
?2 netbook nEtbUk
?2 netbooks nEtbUks
?2 notebook nowtbUk
?2 notebooks nowtbUks
?1 office 'Of,is
?2 office 'Ofsy ?2 office 'Ofsy
openoffice 'opeIN|'Ofis openoffice 'opeIN|'Ofis
?1 outlook 'autl'uk ?1 outlook 'autl'uk
?2 window w'iNdow ?2 window w'iNdow




// historical/famous person names
// historical/famous person s
babbage b'abidZ babbage b'abidZ
bernhard bern'ard bernhard bern'ard
darwin d'Arwin darwin d'Arwin
dijkstra d'ijkstrA: dijkstra d'ijkstrA:
einstein _!'aInSt,aIn einstein _!'aInSt,aIn
?2 einstein _!'aInst,aIn
feynman f'ainm@n feynman f'ainm@n
freud fr'OId
friedrich fr'i:driS
freud fR'OId
friedrich fR'i:dRiS
gauss g'aUs gauss g'aUs
geisel g'aIzEU geisel g'aIzEU
gottfried g'Otfri:t gottfried g'Otfri:t
richard x'iS&rd richard x'iS&rd
riemann r'i:man riemann r'i:man
rijndael x'ain;d'al rijndael x'ain;d'al
rousseau Rus'o
?2 rousseau xus'o
schrödinger Sr'edinger schrödinger Sr'edinger
stephen st'i:v@n stephen st'i:v@n
steve st'i:v steve st'i:v


// foreign common names/surnames // foreign common names/surnames
?1 alison &l'is&N ?1 alison &l'is&N
anderson '&ndersoN
antonio &~nt'onIU
?1 cleverson kl'Evyrs&N ?1 cleverson kl'Evyrs&N
?2 cleverson kl'EversoN ?2 cleverson kl'EversoN
?1 elton 'Elt&N ?1 elton 'Elt&N
emerson 'emE*@-soN
?1 halison &l'is&N ?1 halison &l'is&N
klein kl'aIn // Very common on southern Brazil. klein kl'aIn // Very common on southern Brazil.
?1 kleverson kl'Evers&N ?1 kleverson kl'Evers&N
krueger kR'iZer krueger kR'iZer
krüger kR'iZer krüger kR'iZer
kühl k'il kühl k'il
?1 nelson n'Els&N
mueler m'iler mueler m'iler
mueller m'iler mueller m'iler
müler m'iler müler m'iler
müller m'iler müller m'iler
?1 nelson n'Els&N
ronchi r'OnCi: ronchi r'OnCi:
valter v'aUter
vogel f'o:g@l vogel f'o:g@l
volkmann f'Olkman volkmann f'Olkman









washington w'OSinton
wellington w'Elynton



+ 268
- 236
dictsource/pt_rules
File diff suppressed because it is too large
View File


+ 71
- 45
dictsource/sk_list View File



// character names // character names
_cap vel^ke: _cap vel^ke:
_sub d,olni:||'indeks||
_sup h,oRni:||'indeks||
_?? simbol _?? simbol
_#9 t'ab _#9 t'ab
_#32 'medzeRa _#32 'medzeRa


* hviezda $max3 * hviezda $max3
+ plus $max3 + plus $max3
= Rovna:sa $max3
= Rovna:||sa $max3
@ zavina:tS @ zavina:tS
& ampeRsand & ampeRsand
# kRi:Zik $max3 # kRi:Zik $max3


_! vi:kRitSn^i:k _! vi:kRitSn^i:k
_" u:vodzovki
_" u:vodzowki
_$ dola:R _$ dola:R
_' apostRof _' apostRof
_( za:tvoRka _( za:tvoRka
_) zatvoRit; _) zatvoRit;
_, tSiaRka _, tSiaRka
_- poml-tSka
__ podtSiaRknutie
_- spojovn^i:k
__ podtSiaRkovn^i:k
_. bodka _. bodka
_/ lomeno
_/ lomka
_: dvojbodka _: dvojbodka
_; bodkotSiaRka _; bodkotSiaRka
_< menSi: _< menSi:
_> vetSSi:
_> v&tSSi:
_? ota:zn^ik _? ota:zn^ik
_[ hRanata:||za:tvoRka
_\ opatSne:||lomeno
_] hRanata:||zatvoRit;
_^ stRieZka
_[ hRanata:||z'a:tvoRka
_\ opatSna:||l'omka
_] hRanata:||z'atvoRit;
_^ voka:n^
_` aktsent _` aktsent
_{ zloZena:||za:tvoRka
_| zvisla:||tSiaRa
_} zloZena:||zatvoRit;
_{ zloZena:||z'a:tvoRka
_| zvisla:||tS'iaRa
_} zloZena:||z'atvoRit;
_~ vl-novka _~ vl-novka
_ tvr-da:m'edzeRa // U+00A0 no-break-space
obra:t;eni:v'i:kRitSn^i:k
pReRuSena:'tSiaRa
_ª hoRni:indeks'a:
dvojita:lomena:||za:tvoRka
mekka:poml-tSka
_² nadRuhu:
_³ natRetju
_´ dl:Zen^
_· bodka'vpRostRjedku
_¸ tsedila
_¹ napRvu:
_» dvojita:lomena:||zatvoRit;
_¿ obRa:t;eni:'ota:zn^ik
_– dl-ha:'poml-tSka
_‘ l^ava:'u:vodzovka
_’ prava:'u:vodzovka
_“ horne:'u:vodzovki
_” dolne:'u:vodzovki
_‡ dvojiti:kRi:Z
_• odRa:Zka
_‣ tRojuholni:kova:'odRa:Zka
_ tvr-da:||m'edzeRa // U+00A0 no-break-space
obra:t;eni:||v'i:kRitSn^i:k
pReRuSena:||tS'iaRa
_¨ pRehla:ska
dvojita:||l'omena:||z'a:tvoRka
Rozd;el^ovn^i:k
_´ dl:Zen^
_· bodka||'v||pRostRjedku
_¸ tsedila
_» dvojita:||l'omena:||z'atvoRit;
_¿ obRa:t;eni:||'ota:zn^ik
_– poml-tSka
_‘ hoRne:||j'ednoduche:||'u:vodzowki
_’ odsuvn^i:k
_“ hoRne:||'u:vodzowki
_” dvojita:||h'oRna:||'opatSna:||'u:vodzowka
_„ dolne:||'u:vodzowki
_‚ dolne:||j'ednoduche:||'u:vodzowki
_‡ dvojkRi:Z
_• odRa:Zka
_‣ odRa:Zka||t'Rojuholn^i:k
_⁃ odRa:Zka||'v||tvaRe||p'oml-tSki
‰ pRomile ‰ pRomile
€ euRo € euRo
§ paRagRaf § paRagRaf
÷ d;eleno ÷ d;eleno
× kRa:t × kRa:t
° stupn^ou ° stupn^ou
¢ tsentou
£ libjeR
¤ znatSkameni
¢ tsent
£ libRa
¤ mena
© kopiRajt
® Registrovane:
¥ jen
− mi:nus − mi:nus
± plus'mi:nus
µ mu:
¼ Stvr-tina
± plus||m'i:nus
µ mi:
¼ Stvr-t;ina
½ polovitsa ½ polovitsa
¾ tri_Stvr-tini
¬ logitske:not
æ a'e:
þ poml-tSkanad
¾ t'@-*i||S'tvr-t;ini
¬ logitski:||z'a:poR
æ otvoRene:||'e:
þ soRn
¯ pRuh||n'at
ð ed
ƒ floRe:n
_† kRi:Z
_≈ pRibliZn^e||sa||R'ovna:
_≠ n^eRovna:||s'a
_≤ menSi:||'alebo||sa||R'ovna:
_≥ v&tSSi:||'alebo||sa||R'ovna:
_√ dRuha:||'odmotsn^ina
_∛ tRet;ia||'odmotsn^ina
_∞ n^ekon^etSno
_■ tSieRni||S'tvoRets
_□ bieli||S'tvoRets
_◆ tSieRni||d'iamant
_○ bieli||kR'uh
_● tSieRni||kR'uh
_◦ odRa:Zka||'v||tvaRe||b'ielej||b'odki
_✓ zaSkr-tnut;ie
_✔ tutSne:||z'aSkr-tnut;ie
_➔ Si:pka||'vpRavo
_➢ odRa:Zka||'v||tvaRe||S'i:pki




// Numbers // Numbers

+ 16
- 16
dictsource/tr_list View File

//_lig //_lig
_acu vURg'UimI _acu vURg'UimI
_ac2 tS'IftvURg'UimI _ac2 tS'IftvURg'UimI
_brv k@s'altmaimI
_brv k@s'aLtmaimI
_ced h'aRf _ced h'aRf
_cir Sapk'a _cir Sapk'a
_dia Umla'Ut
_dia UmLa'Ut
_dot YstnOkt'a _dot YstnOkt'a
_grv 'aksanimI _grv 'aksanimI
_hac t'ERsSapk'a _hac t'ERsSapk'a
_mcn uz'atmaimI _mcn uz'atmaimI
_ogo ogon'Ek _ogo ogon'Ek
_rng halk'a
_rng haLk'a
//_stk //_stk
_tld tIld'E _tld tIld'E


// symbols // symbols
_. nOkt'a _. nOkt'a
_, vIRJ'Yl _, vIRJ'Yl
_; nOktal'@vIRJ'Yl
_; nOktaL'@vIRJ'Yl
_: ik'InOkt'a _: ik'InOkt'a
_… 'YtSnOkt'a _… 'YtSnOkt'a
_? soR'UiSa*et,I _? soR'UiSa*et,I
_^ IndZ'EltmEiSa*et'I _^ IndZ'EltmEiSa*et'I
& _!v'E & _!v'E
_& v'EiSa*et'I _& v'EiSa*et'I
_@ kUjRUkl'U'a
_@ kUjRUkL'U'a
_\ t'ERs||ej,IktSIzg'I _\ t'ERs||ej,IktSIzg'I
_( atSpa*ant'Ez _( atSpa*ant'Ez
_) kapapa*ant'Ez _) kapapa*ant'Ez
§ tSEnJ'El § tSEnJ'El
° de*edZ'E ° de*edZ'E
_# dij'Ez _# dij'Ez
_~ jaklaS'@k
__ ,alttSIzg'I
* j'@ld@z $max3
_~ jakLaS'@k
__ ,aLttSIzg'I
* j'@Ld@z $max3
= ESIt $max3 = ESIt $max3
% jYzdE $max3 % jYzdE $max3
+ aRt@ $max3 + aRt@ $max3
_3 'ytS _3 'ytS
_4 d'WRt _4 d'WRt
_5 b'ES _5 b'ES
_6 alt'@
_6 aLt'@
_7 jed'i _7 jed'i
_8 sec'Iz _8 sec'Iz
_9 d'okuz _9 d'okuz
_3X ot'uz _3X ot'uz
_4X k'@Rk _4X k'@Rk
_5X ell'i _5X ell'i
_6X altm'@S
_6X aLtm'@S
_7X jetm'iS _7X jetm'iS
_8X seks'En _8X seks'En
_9X doks'an _9X doks'an
Edirne $2 Edirne $2
Hakkari $1 Hakkari $1
Hatay $1 Hatay $1
Iğdır $1
İngiltere $3
İskenderun $2
ığdır $1
ingiltere $3
iskenderun $2
Isparta $2 Isparta $2
İstanbul $2
İsveç $1
İzmir $1
istanbul $2
isveç $1
izmir $1
Kastamonu $1 Kastamonu $1
Kayseri $1 Kayseri $1
Kilis $1 Kilis $1

+ 37
- 23
dictsource/tr_rules View File

// ?1 mbrola voices // ?1 mbrola voices




// unvoiced consonants
.L01 ç f h k p q s ş t
.L01 ç f h k p q s ş t // unvoiced consonants

.L02 ı a o u // back vowels
.L03 i e ö ü î â ô û // not-back vowels


.replace .replace
` ' ` '
@) acak (_S4 adZak @) acak (_S4 adZak
@) acakmış (_S7 adZakm%@S @) acakmış (_S7 adZakm%@S
@) ayım (_S4 aj@m @) ayım (_S4 aj@m
@) alım (_S4 al@m
@) alım (_S4 aL@m
@) asın (_S4 as@n @) asın (_S4 as@n


@) avru (pa avr'u @) avru (pa avr'u


.group c .group c
c dZ c dZ
ce (_S2 dZ%E


.group ç .group ç
ç tS ç tS
çe (_S2 tS%E


.group d .group d
d d d d
dın (_S3 d@n dın (_S3 d@n
dınız (_S5 d@n@z dınız (_S5 d@n@z
dı (_S2 d@ dı (_S2 d@
dılar (_S5 d@laR
dılar (_S5 d@LaR
dum (_S3 dum dum (_S3 dum
duk (_S3 duk duk (_S3 duk
dun (_S3 dun dun (_S3 dun
dunuz (_S5 dunuz dunuz (_S5 dunuz
du (_S2 du du (_S2 du
dular (_S5 dular
dular (_S5 duLar
düm (_S3 dym düm (_S3 dym
dük (_S3 dyk dük (_S3 dyk
dün (_S3 dyn dün (_S3 dyn


.group g .group g
g g g g
g (i J
g (e J
g (ü J
g (ö J
g (L03 J
L03) g (K J



.group ğ .group ğ
ğ Q ğ Q
A) ğ :||
?1 A) ğ G // mbrola
A) ğ :
?1 A) ğ (+ G // mbrola

a) ğa :
o) ğo :
u) ğu :
ö) ğö :
ü) ğü :
i) ğ j i) ğ j
e) ğ j e) ğ j


.group h .group h
h h h h


@) ıyor (_S4 @j%oR @) ıyor (_S4 @j%oR
@) ın (_S2 @n @) ın (_S2 @n


.group î
î @


.group j .group j
j Z j Z


.group k .group k
k k k k
k (i c
k (e c
k (ü c
k (ö c
k (L03 c
L03) k (K c


ken (_S3 %cen ken (_S3 %cen




.group l .group l
l l l l
l (L02 L
L02) l (K L


la (_S2 %la
la (_S2 %La
le (_S2 %le le (_S2 %le


lar (_S3 laR
lar (_S3 LaR
ler (_S3 leR ler (_S3 leR


li (_S2 li li (_S2 li
lı (_S2 l@
lu (_S2 lu
lı (_S2 L@
lu (_S2 Lu
lü (_S2 ly lü (_S2 ly


lik (_S3 lik lik (_S3 lik
lık (_S3 l@k
luk (_S3 luk
lık (_S3 L@k
luk (_S3 Luk
lük (_S3 lyk lük (_S3 lyk




.group r .group r
r R r R
A) r (A * A) r (A *
ğ) r (A *


ra (_S2 %Ra ra (_S2 %Ra
re (_S2 %Re re (_S2 %Re
yunuz (_S5 %junuz yunuz (_S5 %junuz
yünüz (_S5 %jynyz yünüz (_S5 %jynyz


yla (_S3 %jla
yla (_S3 %jLa
yle (_S3 %jle yle (_S3 %jle


yacak (_S5 jadZak yacak (_S5 jadZak
yecekmiş (_S8 jedZekm%iS yecekmiş (_S8 jedZekm%iS


yayım (_S5 jaj@m yayım (_S5 jaj@m
yalım (_S5 jal@m
yalım (_S5 jaL@m
yasın (_S5 jas@n yasın (_S5 jas@n
yeyim (_S5 jejim yeyim (_S5 jejim
yelim (_S5 jelim yelim (_S5 jelim

+ 404
- 273
dictsource/vi_rules
File diff suppressed because it is too large
View File


BIN
espeak-data/mbrola_ph/fr1_phtrans View File


+ 1
- 0
espeak-data/voices/!v/m3 View File

formant 7 100 100 100 formant 7 100 100 100
formant 8 100 100 100 formant 8 100 100 100


consonants 100
stressAdd 10 10 0 0 0 0 -30 -30 stressAdd 10 10 0 0 0 0 -30 -30

+ 4
- 2
espeak-data/voices/asia/hy-west View File

language hy 8 language hy 8
gender male gender male


dictrules 1

// change consonants for West Armenian pronunciation // change consonants for West Armenian pronunciation
replace 00 b p# replace 00 b p#
replace 00 d t# replace 00 d t#
replace 00 c dZ replace 00 c dZ
replace 00 k g replace 00 k g


replace 00 ** R // ??
replace 00 r R
replace 00 R2 R // ??

+ 6
- 0
espeak-data/voices/asia/ko View File

name Korean
language ko
gender male
pitch 80 118
intonation 2


+ 12
- 0
espeak-data/voices/asia/vi-sgn View File

name vietnam_sgn
language vi-sgn
phonemes vi-sgn
dictrules 2
gender male

words 1
pitch 82 118 //80 118
//breath 75 75 60 40 15 10
//breathw 150 150 200 200 400 400
voicing 90 //18
flutter 20

+ 1
- 1
espeak-data/voices/europe/ga View File

name Irish Gaeilge
name irish-gaeilge
language ga language ga


dictrules 1 // fix for eclipsis dictrules 1 // fix for eclipsis

+ 3
- 3
espeak-data/voices/other/en-n View File

name lancashire
name english-north
language en-uk-north language en-uk-north
language en-uk 3 language en-uk 3
language en 5 language en 5


replace 00 i@3 i@ replace 00 i@3 i@
replace 03 N n replace 03 N n
//replace 03 I i
//replace 03 I2 i
replace 03 i I2



+ 1
- 0
espeak-data/voices/pt View File

gender male gender male


dictrules 2 dictrules 2
stressLength 200 115 230 230 0 0 250 270



+ 3
- 0
espeak-data/voices/test/az View File

name azerbaijani-test
language az


BIN
phsource/envelopes.png View File


+ 10
- 1
phsource/intonation View File

nucleus fall-rise2 78 22 34 52 nucleus fall-rise2 78 22 34 52
endtune endtune


tune q1
tune q1 // small change for version 1.47.05
prehead 45 56
headenv fall 16
head 3 75 43 -7 0
headextend 20 60 35 11 0
nucleus0 fall-rise 89 21
nucleus fall-rise2 86 21 34 68
endtune

tune q1a // previous version
prehead 46 57 prehead 46 57
headenv fall 16 headenv fall 16
head 4 75 43 -7 0 head 4 75 43 -7 0

+ 2
- 1
phsource/mbrola/fr1 View File

volume 17


0 l/2 NULL 0 l 0 l/2 NULL 0 l
0 l/ NULL 0 l 0 l/ NULL 0 l
0 j/ NULL 0 j 0 j/ NULL 0 j
0 ; NULL 0 NULL 0 ; NULL 0 NULL
0 g- NULL 0 NULL 0 g- NULL 0 NULL
0 @- NULL 0 NULL
0 @3 NULL 0 NULL 0 @3 NULL 0 NULL
0 * NULL 0 R 0 * NULL 0 R
0 : NULL 0 NULL 0 : NULL 0 NULL
0 z2 NULL 0 z 0 z2 NULL 0 z
0 z3 NULL 0 z 0 z3 NULL 0 z


0 @- NULL 0 @
0 a- NULL 0 a 0 a- NULL 0 a
0 e- NULL 0 e 0 e- NULL 0 e
0 y- NULL 0 y 0 y- NULL 0 y

+ 16
- 10
phsource/ph_azerbaijani View File



phoneme i phoneme i
vowel starttype #i endtype #i vowel starttype #i endtype #i
length 160
length 180
FMT(vowel/ii_5) FMT(vowel/ii_5)
endphoneme endphoneme


phoneme e phoneme e
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 160
length 200
FMT(vowel/e_mid2) FMT(vowel/e_mid2)
endphoneme endphoneme


phoneme & phoneme &
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 160
length 200
IF thisPh(isWordEnd) THEN
FMT(vowel/&_3)
ENDIF
FMT(vowel/&) FMT(vowel/&)
endphoneme endphoneme




phoneme W phoneme W
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 180
length 200
FMT(vowel/y#_2) FMT(vowel/y#_2)
endphoneme endphoneme


phoneme u phoneme u
vowel starttype #u endtype #u vowel starttype #u endtype #u
length 160
FMT(vowel/u_5)
length 180
FMT(vowel/u_2)
endphoneme endphoneme


phoneme o phoneme o
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 160
FMT(vowel/o_mid)
length 200
FMT(vowel/o_mid2)
endphoneme endphoneme


phoneme a phoneme a
vowel starttype #a endtype #a vowel starttype #a endtype #a
length 200 length 200
FMT(vowel/aa)
IF thisPh(isWordEnd) THEN
FMT(vowel/a#)
ENDIF
FMT(vowel/aa_9)
endphoneme endphoneme


phoneme @ phoneme @
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
ipa ɯ ipa ɯ
length 160
length 180
FMT(vowel/u#_7) FMT(vowel/u#_7)
endphoneme endphoneme



+ 11
- 11
phsource/ph_base2 View File



phoneme a phoneme a
vowel starttype #a endtype #a vowel starttype #a endtype #a
length 180
length 190
IF thisPh(isDiminished) THEN IF thisPh(isDiminished) THEN
ChangePhoneme(a/) ChangePhoneme(a/)
FMT(vowel/a#) FMT(vowel/a#)


phoneme a/ phoneme a/
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 180
length 190
FMT(vowel/a#) FMT(vowel/a#)
endphoneme endphoneme




phoneme e phoneme e
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 170
length 180
FMT(vowel/e) FMT(vowel/e)
endphoneme endphoneme




phoneme E phoneme E
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 170
length 180
FMT(vowel/ee_1) FMT(vowel/ee_1)
endphoneme endphoneme




phoneme i phoneme i
vowel starttype #i endtype #i vowel starttype #i endtype #i
length 150
length 170
IfNextVowelAppend(;) IfNextVowelAppend(;)
FMT(vowel/i) FMT(vowel/i)
endphoneme endphoneme


phoneme o phoneme o
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 170
length 180
FMT(vowel/o) FMT(vowel/o)
endphoneme endphoneme




phoneme O phoneme O
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 170
length 180
FMT(vowel/oo_4) FMT(vowel/oo_4)
endphoneme endphoneme




phoneme u phoneme u
vowel starttype #u endtype #u vowel starttype #u endtype #u
length 160
length 180
FMT(vowel/u_bck) FMT(vowel/u_bck)
endphoneme endphoneme




phoneme U phoneme U
vowel starttype #u endtype #u vowel starttype #u endtype #u
length 160
length 180
FMT(vowel/uu_2) FMT(vowel/uu_2)
endphoneme endphoneme




phoneme y phoneme y
vowel starttype #i endtype #i vowel starttype #i endtype #i
length 160
length 180
FMT(vowel/y) FMT(vowel/y)
endphoneme endphoneme




phoneme Y phoneme Y
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 160
length 180
FMT(vowel/y#) FMT(vowel/y#)
endphoneme endphoneme



+ 5
- 2
phsource/ph_bengali View File

ChangePhoneme(o) ChangePhoneme(o)
ENDIF ENDIF
IF prevPhW(r) THEN
ChangePhoneme(o)
IF prevPhW(r) AND nextVowel(isVowel) THEN
IF nextVowel(isWordEnd) AND nextVowel(V) THEN
ELSE
ChangePhoneme(o)
ENDIF
ENDIF ENDIF
ENDIF ENDIF



+ 208
- 140
phsource/ph_danish View File

// AC + @- OR V: Long "pile" [pi:l@-] // AC + @- OR V: Long "pile" [pi:l@-]
// AC[i]: Long "smidig" [smi:Di] // AC[i]: Long "smidig" [smi:Di]


// Change the length of short vowels (?+vowel)
// Change the length of SHORT vowels (?+vowel)
procedure ShortVowelLength procedure ShortVowelLength
// "endelig" - Short initial vowel sounds too short
IF thisPh(isWordStart) THEN
length 160
RETURN
ENDIF
// "slutte" t/d + @- makes the u too long
IF next2PhW(@-) THEN
IF nextPhW(t) OR nextPhW(d) THEN
//length 100
LengthAdd -50
// "endelig", "ånder" - Short initial vowel sounds too short TEST
IF thisPh(isWordStart) AND nextPhW(n) THEN
IF next2PhW(@-) OR next2PhW(V) THEN
length 160
RETURN
ENDIF
ENDIF
// "slutte" t/d + @- makes the vowel too long
// Problem with compounds like "spildedamp"
IF next2PhW(@-) OR next2PhW(V) THEN
IF nextPhW(t) OR nextPhW(d) THEN
// length 100
LengthAdd -45
// Don't shorten it further if it comes after an "r" sound // Don't shorten it further if it comes after an "r" sound
// Exit the procedure // Exit the procedure
RETURN
ENDIF
ENDIF
// "bygget" - consonant + [@-D] makes the vowel too long
IF next2PhW(@-) THEN
IF next3PhW(t) OR next3PhW(d) OR next3PhW(D) THEN
LengthAdd -50
// Don't shorten it further if it comes after an "r" sound ("brygget")
// Exit the procedure
RETURN
ENDIF
ENDIF
RETURN
ENDIF
ENDIF
// "bygget", "byggede" - consonant + [@-D] makes the vowel too long
IF next2PhW(@-) THEN
IF next3PhW(t) OR next3PhW(d) OR next3PhW(D) THEN
IF thisPh(isFirstVowel) THEN // NOT "cellof'anet"
IF NOT thisPh(?V) THEN // NOT "fjollet"
LengthAdd -40
// Don't shorten it further if it comes after an "r" sound ("brygget")
// Exit the procedure
RETURN
ENDIF
ENDIF
ENDIF
ENDIF
// "bygger" - consonant + [V] makes the vowel too long // "bygger" - consonant + [V] makes the vowel too long
IF nextPhW(isNotVowel) AND next2PhW(V) THEN
LengthAdd -50
IF nextPhW(isNotVowel) AND next2PhW(V) THEN
IF NOT thisPh(isWordStart) THEN // NOT "eller"
// LengthAdd -45
// Don't shorten it further if it comes after an "r" sound ("brygger") // Don't shorten it further if it comes after an "r" sound ("brygger")
// Exit the procedure // Exit the procedure
RETURN
ENDIF
RETURN
ENDIF
ENDIF
// "rigtigt", "fred", "frem", "centralen" - R makes the vowel too long // "rigtigt", "fred", "frem", "centralen" - R makes the vowel too long
IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN
IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN
// length 100 // length 100
LengthAdd -50
ENDIF
// "ring", "ringe", "fængsel"
IF nextPhW(N) THEN
LengthAdd -40
RETURN
ENDIF
// "ring", "ringe", "fængsel", "spinkel", "vindspejl"
IF nextPhW(isNasal) THEN
// length 100 // length 100
LengthAdd -10
ENDIF
// "sigte" t/d + @- makes the vowel too long
IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) THEN
IF next3PhW(@-) THEN
LengthAdd -30
RETURN
ENDIF
// "sigte", "bælte", "henter" t/d + @-/V makes the vowel too long
IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) THEN
IF next3PhW(@-) OR next3PhW(V) THEN
IF thisPh(isFirstVowel) THEN // NOT [i] in "forsp'ildte"
// length 100 // length 100
LengthAdd -50
ENDIF
ENDIF
LengthAdd -30
ENDIF
ENDIF
ENDIF
// "forbandelse" [n@-] makes the vowel too long?
// nasal eg: m, n, N
IF nextPhW(isNasal) AND next2PhW(@-) THEN
IF NOT thisPh(isFirstVowel) AND thisPh(isStressed) THEN
// NOT LengthAdd since [R] might have shortend the vowel above
length 100
ENDIF
ENDIF
// "himlen" l/3 makes the vowel too long
IF nextPhW(isNotVowel) AND next2PhW(l/3) AND next3PhW(@-) OR next3PhW(V) THEN
length 100
ENDIF
// "lænkerne" l/3 makes the vowel too long
IF prevPh(l/3) AND nextPhW(isNotVowel) AND next3PhW(V) THEN
length 120
ENDIF
//"musikken" consonant + [@-n] makes the vowel too long
// Probably wrong. Only k?
IF nextPhW(k) AND next2PhW(@-) AND next3PhW(n) THEN
length 100
ENDIF
//"svælge" [svElj@-] vowel + 2 consonants but length 100 is too short
IF nextPhW(isNotVowel) AND next2PhW(j) THEN
length 140
ENDIF
endprocedure endprocedure


// Change the length of normal vowels (without ? in front of them)
// Change the length of NORMAL vowels (without ? in front of them)
procedure LongVowelLength procedure LongVowelLength
// "guldmine" [ul/3] makes the vowel extremely short
IF prevVowel(u) AND prev2PhW(l/3) THEN
length 350
RETURN
ENDIF
// "guldur" [ul/3] makes the vowel extremely short
IF prevVowel(u) AND prevPhW(l/3) THEN
IF NOT thisPh(isWordEnd) THEN // NOT "umulig"
length 325
RETURN
ENDIF
ENDIF
// "alene" - Short initial vowel sounds too short at length 140 // "alene" - Short initial vowel sounds too short at length 140
IF thisPh(isWordStart) THEN
length 160
RETURN
ENDIF
// "forlade" - [D@-] makes the vowel too long
IF nextPhW(D) AND next2PhW(@-) THEN
length 180
RETURN
ENDIF
IF thisPh(isWordStart) THEN
length 160
// "ønske" The vowel should have been made short becauce og 2 x consonant.
// Take care of it here
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) AND next3PhW(isNotVowel) THEN
length 140
ENDIF
// "ære"
IF nextPhW(V) AND nextPhW(isFinalVowel) THEN
length 240
ENDIF
RETURN
ENDIF
// "huske" - hACC@- vowel too long
IF prevPhW(h) AND nextPhW(isNotVowel) AND next2PhW(isNotVowel) AND next3PhW(@-) THEN
length 110
RETURN
ENDIF
// PB long vowel followed by [@-] or [V](vowel+vowel) - "pigen" [p'i@-n] // PB long vowel followed by [@-] or [V](vowel+vowel) - "pigen" [p'i@-n]
IF nextPhW(@-) OR nextPhW(V) THEN
length 225
ENDIF
IF nextPhW(@-) OR nextPhW(V) THEN
length 225
ENDIF
// PB "enig", "enige", "evig", "stædig" - vowel+consolant+[i] // PB "enig", "enige", "evig", "stædig" - vowel+consolant+[i]
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
length 225
ENDIF
// "ræve", "dele", "mene", "røve", "møve"
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(3) OR next3PhW(@-) THEN
length 225
ENDIF
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
length 225
ENDIF
// "dele", "mene", "møve"
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(3) OR next3PhW(@-) THEN
length 225
ENDIF
// "sveder", "deler"
IF nextPhW(isNotVowel) AND next2PhW(V) THEN
length 225
ENDIF
// "maskinen" consonant + [@-n]: vowel too long
IF nextPhW(isNotVowel) AND next2PhW(@-) AND next3PhW(n) THEN
length 160
ENDIF
// "vilje", "nedladende" [n'eDl&D@-n@-], "delte" - short followed by 2 consonants // "vilje", "nedladende" [n'eDl&D@-n@-], "delte" - short followed by 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
// Don't make "møve" [m'Ww_!@-_!] short // Don't make "møve" [m'Ww_!@-_!] short
IF NOT next2PhW(_!) THEN
length 140
ENDIF
ENDIF
IF NOT next2PhW(_!) THEN
length 140
ENDIF
ENDIF
// "bryde", "bryder", "strålen", "henrivende" R makes the vowel too long // "bryde", "bryder", "strålen", "henrivende" R makes the vowel too long
IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN
IF next2PhW(@-) OR next2PhW(V) THEN
// length 180
LengthAdd -70
IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN
IF NOT thisPh(V) AND next2PhW(@-) OR next2PhW(V) THEN
length 140
ENDIF
ENDIF ENDIF
ENDIF
// "syste", "sylte" t/d/D + @- makes the vowel too long
// "international", - added [V] TEST
IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) OR next2PhW(D) THEN
IF next3PhW(@-) OR next3PhW(V) THEN
length 110
ENDIF
ENDIF
// "glimrende" [l/3] makes the following vowel too long
// "føden"
IF nextPhW(D) AND next2PhW(@-) AND next3PhW(n) THEN
length 180
ENDIF
// "glimrende", "glemte" [l/3] makes the following vowel too long
// LengthAdd doesn't work here. The length could be 225 or 140 - 30 // LengthAdd doesn't work here. The length could be 225 or 140 - 30
IF prevPhW(l/3) THEN
// LengthAdd -30
length 110
ENDIF
IF prev2PhW(g) AND prevPhW(l/3) AND nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 110
RETURN
ENDIF
// l/3 makes the vowel too long (+ voiced?)
// isVoiced = b, d, g, v, z
IF prevPhW(l/3) AND nextPhW(isVoiced) THEN
// "klub", "klud"
// The vowel should have been short but we fix it here
IF NOT next2PhW(@-) AND NOT next2PhW(V) THEN
length 100
ELSE
// "slæde", "lader"
length 160
ENDIF
ENDIF
// "længe" - short - 2 consonants => 1 consonant (ng => [N]) // "længe" - short - 2 consonants => 1 consonant (ng => [N])
IF nextPhW(N) THEN
length 140
ENDIF
IF nextPhW(isNasal) THEN
IF NOT prevPhW(R) AND NOT prevPhW(r) AND NOT prevPhW(3-) THEN
length 140
// "omkring", "ring" - both prev. N and next R
ELIF prevPhW(R) OR prevPhW(r) OR prevPhW(3-) THEN
length 110
ENDIF
ENDIF
// "buskene", "krøbling" The vowel should have been made short becauce og 2 x consonant.
// Take care of it here
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
IF NOT nextPhW(l/3) THEN
IF NOT nextPhW(r) AND NOT prevPhW(R) AND NOT prevPhW(3-) THEN // NOT "Maria"
length 110
ENDIF
ENDIF
ENDIF
// "barnet" - consonant + [@-D]: too long vowel
IF nextPhW(isNotVowel) AND next2PhW(@-) AND next3PhW(D) THEN
length 160
ENDIF
// "trin", "trit", "ring" - vowel too long
// IF prevPhW(isRhotic) THEN
IF prevPhW(R) OR prevPhW(r) OR prevPhW(3-) THEN
IF nextPhW(isNotVowel) AND nextPhW(isWordEnd) THEN
length 110
ENDIF
ENDIF
endprocedure endprocedure


// A bit longer than [@-] // A bit longer than [@-]
phoneme i phoneme i
vowel starttype #i endtype #i vowel starttype #i endtype #i
length 140 length 140
// Long vowel followed by consonant and @- "gide", "pile"
IF nextPhW(isNotVowel) AND next2PhW(@-) THEN
// length 225
ENDIF
// "gider", vrider"
IF nextPhW(D) AND next2PhW(V) OR next2PhW(?V) THEN
length 140
ENDIF
//"skider" short
IF nextPhW(D) AND next2PhW(V) THEN
length 140
ENDIF
//"skideren" long
IF nextPhW(D) AND next2PhW(V) AND next3PhW(V) THEN
length 225
ENDIF
CALL LongVowelLength CALL LongVowelLength
FMT(vowel/i_4) FMT(vowel/i_4)
endphoneme endphoneme
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 140 length 140
CALL LongVowelLength CALL LongVowelLength
CALL ShortVowelLength
// CALL ShortVowelLength
FMT(vowel/e) FMT(vowel/e)
endphoneme endphoneme




phoneme & phoneme &
vowel starttype #e endtype #e vowel starttype #e endtype #e
ipa æ
ipa a
length 140 length 140
// "same", "sale", "bade" - consonant + @-: long // "same", "sale", "bade" - consonant + @-: long
// but NOT "hinanden" // but NOT "hinanden"
// e.g. the last a in "staldkarl" // e.g. the last a in "staldkarl"
// "sale" vs. "sal" // "sale" vs. "sal"
phoneme ?& phoneme ?&
ipa a
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 140 length 140
CALL ShortVowelLength
FMT(vowel/ee_2) FMT(vowel/ee_2)
endphoneme endphoneme


// "revl" vs. "tremme" // "revl" vs. "tremme"
phoneme ?&# phoneme ?&#
vowel starttype #e endtype #e vowel starttype #e endtype #e
ipa ?a
length 140 length 140
CALL ShortVowelLength CALL ShortVowelLength
FMT(vowel/&) FMT(vowel/&)
ipa ɒ // changed from ɔ - Den Danske Ordbog: ɒ ipa ɒ // changed from ɔ - Den Danske Ordbog: ɒ
// "sove", "sover" - consonant + @ or V: long // "sove", "sover" - consonant + @ or V: long
IF next2PhW(@-) OR next2PhW(V) THEN IF next2PhW(@-) OR next2PhW(V) THEN
length 225
// length 225
ENDIF ENDIF
// PB "gået" - ThisPh + V or @- // PB "gået" - ThisPh + V or @-
IF nextPhW(V) OR nextPhW(@-) THEN IF nextPhW(V) OR nextPhW(@-) THEN
length 225
// length 225
ENDIF ENDIF
// "såre", "sårede" [s'O:?OD@-] // "såre", "sårede" [s'O:?OD@-]
IF nextPhW(O) OR nextPhW(?O) THEN IF nextPhW(O) OR nextPhW(?O) THEN
phoneme ?O phoneme ?O
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 140 length 140
CALL ShortVowelLength
FMT(vowel/o_5) FMT(vowel/o_5)
endphoneme endphoneme


phoneme ?V phoneme ?V
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 140 length 140
CALL ShortVowelLength
FMT(vowel/V_4) FMT(vowel/V_4)
endphoneme endphoneme


FMT(vowel/oo_2) FMT(vowel/oo_2)
endphoneme endphoneme


// Short 0 "sukker"
// Short 0 "sukker", "provst"
phoneme ?0 phoneme ?0
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 140 length 140
ipa ɔ ipa ɔ
CALL ShortVowelLength
FMT(vowel/oo_2) FMT(vowel/oo_2)
endphoneme endphoneme


phoneme y phoneme y
vowel starttype #i endtype #i vowel starttype #i endtype #i
length 140 length 140
// PB long vowel followed by consonant and certain vowels
// "gyde", "gyder"
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(V) THEN
// not "gebyret" TEST
IF NOT nextPhW(3-) AND NOT nextPhW(R) AND NOT nextPhW(r) THEN
length 225
ENDIF
ENDIF
// "syge" [sy@-] vowel + vowel: extra length, but NOT "fyret" [fyVD]
IF nextPhW(@-) OR nextPhW(3) AND NOT next2PhW(D) THEN
length 225
ENDIF
// "tyve"
IF nextPhW(w) AND next2PhW(@-) THEN
length 225
ENDIF
CALL LongVowelLength
CALL LongVowelLength
FMT(vowel/y) FMT(vowel/y)
endphoneme endphoneme


phoneme W phoneme W
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 140 length 140
// "røveri" but NOT "surfer" [sWfV] TEST
IF next2PhW(V) OR next2PhW(?V) AND NOT next2PhW(isFinalVowel) THEN
length 140
ENDIF
// "børnebog" - short
IF nextPhW(r) AND next2PhW(n) AND next3PhW(@-) THEN
length 140
ENDIF
CALL LongVowelLength
CALL LongVowelLength
FMT(vowel/oe) FMT(vowel/oe)
endphoneme endphoneme


// Added for the ø in "røv", "røg", "øje" instead of [V3] // Added for the ø in "røv", "røg", "øje" instead of [V3]
phoneme W# phoneme W#
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 140 //225
// PB long vowel followed by consonant and certain vowels
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(@) OR next2PhW(3) OR next2PhW(V) OR next2PhW(?V) THEN
length 225
ENDIF
length 140
CALL LongVowelLength
FMT(vowel/V) FMT(vowel/V)
endphoneme endphoneme


lengthmod 7 lengthmod 7
// [ll] => [-l] - avoid double l // [ll] => [-l] - avoid double l
IF nextPhW(l) THEN IF nextPhW(l) THEN
// ChangePhoneme(-)
// ChangePhoneme(NULL)
ENDIF ENDIF
ChangePhoneme(l/3) ChangePhoneme(l/3)
// CALL base/l // CALL base/l
IF nextPhW(isVowel) AND NOT nextPhW(?V) AND NOT nextPhW(V) AND NOT nextPhW(@-) THEN IF nextPhW(isVowel) AND NOT nextPhW(?V) AND NOT nextPhW(V) AND NOT nextPhW(@-) THEN
ChangePhoneme(R) ChangePhoneme(R)
ENDIF ENDIF
// "generer" [Sen'e:Vr], "mysterier" - delete the r
IF prevPhW(V) AND thisPh(isWordEnd) THEN
ChangePhoneme(NULL)
ENDIF
FMT(r/a_) FMT(r/a_)
endphoneme endphoneme


ENDIF ENDIF
IF nextPhW(isVowel) THEN IF nextPhW(isVowel) THEN
NextVowelStarts NextVowelStarts
VowelStart(j/j@)
VowelStart(j/j@,-45) // jøderne
VowelStart(j/ja) VowelStart(j/ja)
VowelStart(j/je,-35) VowelStart(j/je,-35)
VowelStart(j/ji) VowelStart(j/ji)
Vowelout len=70 Vowelout len=70
FMT(j/j_) FMT(j/j_)
ENDIF ENDIF
endphoneme
endphoneme


+ 2
- 2
phsource/ph_english_us View File



phoneme OI phoneme OI
vowel starttype #o endtype #i vowel starttype #o endtype #i
length 280
FMT(vdiph/ooi_4)
length 270
FMT(vdiph/ooi_3)
endphoneme endphoneme





+ 39
- 16
phsource/ph_hindi View File

length 130 length 130


ChangeIfDiminished(@-) ChangeIfDiminished(@-)
IF nextPh(H) THEN
IF nextPh(H) OR prevPh(H) THEN
FMT(vowel/@_low) FMT(vowel/@_low)
ENDIF ENDIF
FMT(vowel/@_bck) FMT(vowel/@_bck)
vowel flag1 starttype #@ endtype #@ vowel flag1 starttype #@ endtype #@
length 130 length 130


IF thisPh(isWordStart) THEN
FMT(vowel/V_3)
RETURN
ENDIF

IF thisPh(isNotStressed) THEN IF thisPh(isNotStressed) THEN
IF prevPh(H) THEN IF prevPh(H) THEN
ChangePhoneme(@) ChangePhoneme(@)
ChangePhoneme(NULL) ChangePhoneme(NULL)
ENDIF ENDIF


IF NOT nextVowel(isFlag1) THEN
IF thisPh(isSeqFlag1) THEN
// delete the last inherent vowel of a sequence
ChangePhoneme(NULL)
IF prev2PhW(isVowel) AND NOT nextVowel(isFlag1) THEN
IF nextPhW(isNotVowel) AND nextPh(isWordEnd) THEN
// don't delete schwa before a word-final consonant
ELSE ELSE
IF NOT thisPh(isFirstVowel) THEN
// delete if not the first vowel, and is an isolated 'a'
ChangePhoneme(NULL)
ENDIF
ChangePhoneme(NULL)
ENDIF ENDIF
ENDIF ENDIF
ENDIF ENDIF
ChangePhoneme(@) ChangePhoneme(@)
ENDIF ENDIF


IF nextPh(H) THEN
IF nextPh(H) OR prevPh(H) THEN
FMT(vowel/@_low) FMT(vowel/@_low)
ENDIF ENDIF
ENDIF ENDIF
phoneme a: phoneme a:
vowel long starttype #a endtype #a vowel long starttype #a endtype #a
length 190 length 190
IF nextPhW(j) THEN
FMT(vowel/a_5)
ENDIF
FMT(vowel/aa_9) FMT(vowel/aa_9)
endphoneme endphoneme




phoneme E~ phoneme E~
vowel long starttype #e endtype #e vowel long starttype #e endtype #e
length 230
length 220
FMT(vnasal/ee_n2) FMT(vnasal/ee_n2)
endphoneme endphoneme


phoneme a~ phoneme a~
vowel long starttype #a endtype #a vowel long starttype #a endtype #a
length 250
FMT(vnasal/aa_n)
length 220
FMT(vnasal/&_n)
endphoneme endphoneme


phoneme V~ phoneme V~
vowel long starttype #@ endtype #@ vowel long starttype #@ endtype #@
length 250
length 220
FMT(vnasal/V_n) FMT(vnasal/V_n)
endphoneme endphoneme


phoneme O~ phoneme O~
vowel long starttype #o endtype #o vowel long starttype #o endtype #o
length 230
length 220
FMT(vnasal/oo_n2) FMT(vnasal/oo_n2)
endphoneme endphoneme




phoneme u~ phoneme u~
vowel long starttype #u endtype #u vowel long starttype #u endtype #u
length 230
length 220
FMT(vnasal/u_n) FMT(vnasal/u_n)
endphoneme endphoneme


endphoneme endphoneme




phoneme r
liquid rhotic
lengthmod 3
IF thisPh(isWordEnd) THEN
CALL base/r/
ELSE
IF prevPhW(isVowel) THEN
IF nextPhW(isNotVowel) OR nextPhW(V) THEN
ChangePhoneme(*)
ENDIF
ENDIF
CALL base/r
ENDIF
ipa ɾ
endphoneme


+ 1
- 1
phsource/ph_portugal View File

phoneme U phoneme U
vowel starttype #u endtype #u vowel starttype #u endtype #u
length 130 length 130
IF nextPh(isVowel) THEN
IF thisPh(isWordEnd) AND thisPh(isAfterStress) AND nextPh(isVowel) THEN
ChangePhoneme(w) ChangePhoneme(w)
ENDIF ENDIF
FMT(vowel/u_6) FMT(vowel/u_6)

+ 1
- 1
phsource/ph_pt_brazil View File

phoneme U phoneme U
vowel starttype #u endtype #u vowel starttype #u endtype #u
length 140 length 140
IF thisPh(isWordEnd) AND nextPh(isVowel) THEN
IF thisPh(isWordEnd) AND thisPh(isAfterStress) AND nextPh(isVowel) THEN
ChangePhoneme(w) ChangePhoneme(w)
ENDIF ENDIF
FMT(vowel/uu_bck) FMT(vowel/uu_bck)

+ 13
- 8
phsource/ph_spanish View File



phoneme a phoneme a
vowel starttype #a endtype #a vowel starttype #a endtype #a
length 180
length 200
FMT(vowel/a_4) FMT(vowel/a_4)
endphoneme endphoneme


phoneme e phoneme e
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 190
length 200
FMT(vowel/e_mid2) FMT(vowel/e_mid2)
endphoneme endphoneme


phoneme E phoneme E
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 190
length 200
FMT(vowel/e_mid2) FMT(vowel/e_mid2)
endphoneme endphoneme


phoneme i phoneme i
vowel starttype #i endtype #i vowel starttype #i endtype #i
length 170
length 190
IfNextVowelAppend(;) IfNextVowelAppend(;)
FMT(vowel/i) FMT(vowel/i)
endphoneme endphoneme


phoneme o phoneme o
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 190
length 200
FMT(vowel/oo) FMT(vowel/oo)
endphoneme endphoneme


phoneme O phoneme O
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 190
length 200
FMT(vowel/oo) FMT(vowel/oo)
endphoneme endphoneme


phoneme u phoneme u
vowel starttype #u endtype #u vowel starttype #u endtype #u
length 180
length 200
FMT(vowel/u_bck2) FMT(vowel/u_bck2)
endphoneme endphoneme


voicingswitch T voicingswitch T
CALL base/D CALL base/D
IF nextPh(isPause2) THEN IF nextPh(isPause2) THEN
FMT(voc/dh_) addWav(vocw/dh, 40) // weaker
FMT(voc/dh_) addWav(vocw/dh, 35) // weaker
ENDIF ENDIF
endphoneme endphoneme




phoneme t // dental variant of /t/
import_phoneme base/t[
endphoneme


phoneme s phoneme s
vls alv frc sibilant vls alv frc sibilant
lengthmod 3 lengthmod 3

+ 37
- 17
phsource/ph_turkish View File



phoneme i phoneme i
vowel starttype #i endtype #i vowel starttype #i endtype #i
length 150
length 180
IF thisPh(isTranslationGiven) THEN IF thisPh(isTranslationGiven) THEN
// don't reduce the vowel if phonemes are explicitly given // don't reduce the vowel if phonemes are explicitly given
ELSE ELSE


phoneme I phoneme I
vowel starttype #i endtype #i vowel starttype #i endtype #i
length 150
length 180
FMT(vowel/ii_5) FMT(vowel/ii_5)
endphoneme endphoneme




phoneme y phoneme y
vowel starttype #u endtype #u vowel starttype #u endtype #u
length 155
length 180
IF thisPh(isTranslationGiven) THEN IF thisPh(isTranslationGiven) THEN
// don't reduce the vowel if phonemes are explicitly given // don't reduce the vowel if phonemes are explicitly given
ELSE ELSE


phoneme Y phoneme Y
vowel starttype #u endtype #u vowel starttype #u endtype #u
length 155
length 180
FMT(vowel/u#) FMT(vowel/u#)
endphoneme endphoneme




phoneme e phoneme e
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 180
length 200
IF thisPh(isTranslationGiven) THEN IF thisPh(isTranslationGiven) THEN
// don't reduce the vowel if phonemes are explicitly given // don't reduce the vowel if phonemes are explicitly given
ELSE ELSE
IF nextPh(isWordEnd) OR next2PhW(isNotVowel) THEN
IF nextPh(isRhotic) OR nextPh(isNasal) OR nextPh(l) OR nextPh(L) THEN
ChangePhoneme(&)
ENDIF
ENDIF

IF thisPh(isFinalVowel) THEN IF thisPh(isFinalVowel) THEN
ChangePhoneme(E) ChangePhoneme(E)
ENDIF ENDIF


phoneme E phoneme E
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 180
length 200
FMT(vowel/e_mid) FMT(vowel/e_mid)
endphoneme endphoneme


phoneme &
vowel starttype #a endtype #a
length 200
FMT(vowel/ee_6)
endphoneme



phoneme W phoneme W
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 180
length 200
FMT(vowel/y#) FMT(vowel/y#)
endphoneme endphoneme




phoneme a phoneme a
vowel starttype #a endtype #a vowel starttype #a endtype #a
length 190
length 200
FMT(vowel/a#_4) FMT(vowel/a#_4)
endphoneme endphoneme




phoneme u phoneme u
vowel starttype #u endtype #u vowel starttype #u endtype #u
length 150
length 180
IF thisPh(isTranslationGiven) THEN IF thisPh(isTranslationGiven) THEN
// don't reduce the vowel if phonemes are explicitly given // don't reduce the vowel if phonemes are explicitly given
ELSE ELSE


phoneme U phoneme U
vowel starttype #u endtype #u vowel starttype #u endtype #u
length 150
length 180
FMT(vowel/uu_2) FMT(vowel/uu_2)
endphoneme endphoneme


phoneme @ phoneme @
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
ipa ɯ ipa ɯ
length 150
length 180
FMT(vowel/u#_7) FMT(vowel/u#_7)
endphoneme endphoneme




phoneme o phoneme o
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 190
length 200
IF thisPh(isTranslationGiven) THEN IF thisPh(isTranslationGiven) THEN
// don't reduce the vowel if phonemes are explicitly given // don't reduce the vowel if phonemes are explicitly given
ELSE ELSE


phoneme O phoneme O
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 190
length 200
FMT(vowel/oo) FMT(vowel/oo)
endphoneme endphoneme


endphoneme endphoneme




phoneme l
import_phoneme en/l
endphoneme

phoneme G phoneme G
import_phoneme en/r/ import_phoneme en/r/
lengthmod 7 lengthmod 7
endphoneme endphoneme



phoneme R
vcd alv flp rhotic
IF prevPhW(isVowel) AND nextPhW(isVowel) THEN
CALL base/*
// ELIF prevPhW(isNotVowel) THEN
// CALL base/R
ELSE
CALL base/r
ENDIF
ipa ɾ
endphoneme

+ 80
- 50
phsource/ph_vietnam View File



phoneme 3 // sắc Tone(rising phoneme 3 // sắc Tone(rising
stress stress
Tone(25, 50, envelope/p_rise, NULL) // 25
Tone(30, 60, envelope/p_rise, NULL) // 25 50
endphoneme endphoneme




phoneme 4 // hỏi Tone(curve (dipping rising) phoneme 4 // hỏi Tone(curve (dipping rising)
stress stress
Tone(30, 5, envelope/p_fallrise, NULL)
Tone(40, 5, envelope/p_fallrise, NULL) //30
endphoneme endphoneme






phoneme a phoneme a
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 120
length 140
FMT(vowel/a_6) //a_4) FMT(vowel/a_6) //a_4)
endphoneme endphoneme


phoneme a: phoneme a:
vowel starttype #a endtype #a vowel starttype #a endtype #a
length 200 //280
FMT(vietnam/a) //FMT(vowel/a_6)
length 240 //280
FMT(vowel/a_8)
endphoneme endphoneme




phoneme E phoneme E
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 200
length 240
FMT(vowel/ee_3) FMT(vowel/ee_3)
endphoneme endphoneme


phoneme e phoneme e
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 200
length 140
FMT(vowel/e) FMT(vowel/e)
endphoneme endphoneme




phoneme i phoneme i
vowel starttype #i endtype #i vowel starttype #i endtype #i
length 190
length 240
IfNextVowelAppend(;) IfNextVowelAppend(;)
IF prevPhW(w) THEN IF prevPhW(w) THEN
VowelStart(w/wi) VowelStart(w/wi)
ELSE ELSE
length 200 length 200
ENDIF ENDIF
FMT(vowel/aa_4)
FMT(vowel/0_2) //aa_4)
endphoneme endphoneme


phoneme o phoneme o
ELSE ELSE
length 200 length 200
ENDIF ENDIF
FMT(vowel/o_2)
FMT(vowel/o) // o_2)
endphoneme endphoneme




IF nextPh(kh) OR nextPh(N) THEN // hear as ung sound IF nextPh(kh) OR nextPh(N) THEN // hear as ung sound
length 120 length 120
ELSE ELSE
length 200
length 240
ENDIF ENDIF
FMT(vnasal/u_n) //vowel/u_7)
FMT(vowel/u_5)
endphoneme endphoneme


phoneme y phoneme y
IF nextPh(kh) OR nextPh(N) THEN IF nextPh(kh) OR nextPh(N) THEN
length 120 length 120
ELSE ELSE
length 200
length 180
ENDIF ENDIF
FMT(vowel/u#_5) FMT(vowel/u#_5)
endphoneme endphoneme


phoneme @ phoneme @
vowel starttype #@ endtype #a vowel starttype #@ endtype #a
IF nextPh(kh) OR nextPh(N) THEN
IF nextPh(kh) OR nextPh(N) OR nextPh(n^) OR nextPh(c) THEN
length 120 length 120
ELSE ELSE
length 170
length 200
ENDIF ENDIF
FMT(vowel/V) //vowel/@_2) FMT(vowel/V) //vowel/@_2)
endphoneme endphoneme


phoneme @: phoneme @:
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 280
length 200
FMT(vowel/@_2) FMT(vowel/@_2)
endphoneme endphoneme




phoneme aI phoneme aI
vowel starttype #a endtype #i vowel starttype #a endtype #i
length 200 //250
FMT(vdiph/&y)
length 140 //250
FMT(vdiph/&i_2)
endphoneme endphoneme






phoneme eI phoneme eI
vowel starttype #e endtype #i vowel starttype #e endtype #i
length 200
length 140
FMT(vdiph/ei) FMT(vdiph/ei)
endphoneme endphoneme




phoneme EI phoneme EI
vowel starttype #e endtype #i vowel starttype #e endtype #i
length 200
length 140
FMT(vdiph/eei) FMT(vdiph/eei)
endphoneme endphoneme


phoneme OI phoneme OI
vowel starttype #o endtype #i vowel starttype #o endtype #i
length 200 length 200
FMT(vdiph/0i)
FMT(vdiph/ooi_3)
endphoneme endphoneme






phoneme aU phoneme aU
vowel starttype #a endtype #u vowel starttype #a endtype #u
length 210
length 200
FMT(vdiph/aau_4) FMT(vdiph/aau_4)
endphoneme endphoneme




phoneme a:U phoneme a:U
vowel starttype #a endtype #u vowel starttype #a endtype #u
length 230 //270
length 200 //270
FMT(vdiph/au) FMT(vdiph/au)
endphoneme endphoneme




phoneme iU phoneme iU
vowel starttype #i endtype #u vowel starttype #i endtype #u
length 200
length 140
FMT(vdiph2/iu) FMT(vdiph2/iu)
endphoneme endphoneme


phoneme @U phoneme @U
vowel starttype #@ endtype #u vowel starttype #@ endtype #u
length 200
length 140
FMT(vdiph/@u_3) FMT(vdiph/@u_3)
endphoneme endphoneme


phoneme @:U phoneme @:U
vowel starttype #@ endtype #u vowel starttype #@ endtype #u
length 270
length 140
FMT(vdiph/@u) FMT(vdiph/@u)
endphoneme endphoneme




phoneme i@ phoneme i@
vowel starttype #i endtype #@ vowel starttype #i endtype #@
length 240
length 140
FMT(vdiph2/ii@_3) FMT(vdiph2/ii@_3)
endphoneme endphoneme


phoneme y@ phoneme y@
vowel starttype #i endtype #@ vowel starttype #i endtype #@
length 200
length 140
FMT(vdiph2/y-y#) FMT(vdiph2/y-y#)
endphoneme endphoneme


phoneme u@ phoneme u@
vowel starttype #u endtype #@ vowel starttype #u endtype #@
length 150 //200
length 100 //200
FMT(vdiph2/uu@) FMT(vdiph2/uu@)
endphoneme endphoneme




phoneme o# // ông phoneme o# // ông
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 200
length 140
FMT(vnasal/a#u_n) FMT(vnasal/a#u_n)
endphoneme endphoneme


phoneme O# // ong phoneme O# // ong
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 200
length 140
FMT(vnasal/&u_n) FMT(vnasal/&u_n)
endphoneme endphoneme




phoneme o@ phoneme o@
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 160
length 140
FMT(vdiph2/oa) FMT(vdiph2/oa)
endphoneme endphoneme


phoneme o& phoneme o&
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 160
length 140
FMT(vietnam/oe) FMT(vietnam/oe)
endphoneme endphoneme


phoneme iE // iê : viết, giệc phoneme iE // iê : viết, giệc
vowel starttype #i endtype #e vowel starttype #i endtype #e
length 190
length 140
FMT(vietnam/ie_2) FMT(vietnam/ie_2)
endphoneme endphoneme


phoneme Oi // oai sound
vowel starttype #o endtype #i
length 140
FMT(vdiph/ooi_3)
endphoneme

// Vowel and Dipthong for south dialect

phoneme O- // ôi southern sound
vowel starttype #o endtype #i
length 150
FMT(vnasal/oi_n)
endphoneme

phoneme @- // ơi southern sound
vowel starttype #o endtype #i
length 150
FMT(vdiph/@i_3)
endphoneme

phoneme u- // u southern sound
vowel starttype #u endtype #u
length 150
FMT(vowel/u_3,70)
endphoneme



phoneme kh phoneme kh
vls vel frc vls vel frc
lengthmod 3 lengthmod 3
Vowelin f1=0 f2=2300 200 400 f3=200 80
Vowelin f1=0 f2=2300 200 400 f3=200 80 len=30
Vowelout f1=0 f2=2300 300 400 f3=200 80 rms=20 Vowelout f1=0 f2=2300 300 400 f3=200 80 rms=20
WAV(vietnam/_c,5) //ufric/x, 50) WAV(vietnam/_c,5) //ufric/x, 50)
endphoneme endphoneme


phoneme l phoneme l
liquid liquid
lengthmod 7
Vowelin f1=0 f2=1700 -300 300 f3=-100 80 len=30
//lengthmod 7
//IF nextPh(isNotVowel) THEN //IF nextPh(isNotVowel) THEN
// ChangePhoneme(l/2) // ChangePhoneme(l/2)
//ENDIF //ENDIF

//CALL vowelstart_l //CALL vowelstart_l


FMT(l/l_vi) FMT(l/l_vi)
vls alv stop vls alv stop
//voicingswitch d //voicingswitch d
lengthmod 2 lengthmod 2
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
Vowelin f1=0 f2=1700 -300 300 f3=-100 80 len=30
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20


WAV(vietnam/th, 50) WAV(vietnam/th, 50)
vls pla afr sibilant vls pla afr sibilant
//voicingswitch dZ //voicingswitch dZ
lengthmod 2 lengthmod 2
Vowelin f1=0 f2=2300 200 400 f3=-100 80
Vowelin f1=0 f2=2300 200 400 f3=-100 80 len=30


WAV(vietnam/tr,10) WAV(vietnam/tr,10)


phoneme d phoneme d
vcd alv stop vcd alv stop
lengthmod 5
// lengthmod 5
Vowelin f1=1 f2=1700 -300 300 f3=-100 80
Vowelout f1=2 f2=1700 -300 300 f3=-100 80 brk
Vowelin f1=1 f2=1700 -300 300 f3=-100 80 len=30
Vowelout f1=2 f2=1700 -300 300 f3=-100 80 brk len=30
WAV(vietnam/dd) WAV(vietnam/dd)
endphoneme endphoneme
vls pal stop palatal vls pal stop palatal
//voicingswitch J //voicingswitch J
lengthmod 2 lengthmod 2
length 75
Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70
Vowelout f1=1 f2=2700 400 600 f3=200 70 len=50 colr=1
length 2
Vowelin f1=0 f2=2700 400 600 f3=300 80 len=30 brk
Vowelout f1=1 f2=2700 400 600 f3=200 70 len=30 colr=1


WAV(vietnam/ch,5) WAV(vietnam/ch,5)


phoneme n phoneme n
vcd alv nasal vcd alv nasal
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
Vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 brk len=30
Vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk len=30
lengthmod 4 lengthmod 4
FMT(n/n#_)
length 75
FMT(n/nr_)
endphoneme endphoneme


phoneme t[ // dental variant of /t/ phoneme t[ // dental variant of /t/
vls dnt stop vls dnt stop
voicingswitch d[ voicingswitch d[
lengthmod 2 lengthmod 2
Vowelin f1=1 f2=1500 -250 250 f3=-100 80 amp=16
Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20
length 5
Vowelin f1=1 f2=1500 -250 250 f3=-100 80 amp=16 len=30
Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 len=30


IF nextPh(isPause2) THEN IF nextPh(isPause2) THEN
WAV(ustop/t_unasp2, 5) WAV(ustop/t_unasp2, 5)

+ 42
- 5
phsource/ph_vietnam_hue View File



phoneme 1 // ngang tone: level phoneme 1 // ngang tone: level
stress stress
Tone(30, 2, envelope/p_level, NULL) // similar Hue dialect tone
Tone(40, 5, envelope/p_level, NULL) // similar Hue dialect tone
endphoneme endphoneme




phoneme 2 // huyền tone: low falling phoneme 2 // huyền tone: low falling
stress stress
Tone(20, 25, envelope/p_fall,envelope/vi_6amp) // NULL) //20 8
Tone(20, 25, envelope/p_fall,envelope/vi_6amp) // NULL) //20 25
endphoneme endphoneme




phoneme 3 // sắc Tone(rising phoneme 3 // sắc Tone(rising
stress stress
Tone(2, 10, envelope/p_rise, NULL) // 25 50 45 75
Tone(2, 10, envelope/p_fallrise, NULL) // 2 10
endphoneme endphoneme




phoneme 4 // hỏi Tone(curve (dipping rising) phoneme 4 // hỏi Tone(curve (dipping rising)
stress stress
Tone(20, 5, envelope/p_512,NULL) //Tone(55, 5, envelope/p_fallrise, NULL) //30 5 m 55 5
Tone(5, 10, envelope/p_512,NULL) //20 5
endphoneme endphoneme




phoneme 5 // ngã tone: broken (creaking rising) phoneme 5 // ngã tone: broken (creaking rising)
stress stress
Tone(50,2, envelope/p_214, envelope/vi_5amp) // 28,58 m20 85
Tone(10, 15, envelope/p_512, envelope/vi_6amp) // 40 20
endphoneme endphoneme




Tone(5, 40, envelope/p_level, NULL) //Tone(99, 50, envelope/p_fall, NULL) // 40 20 Tone(5, 40, envelope/p_level, NULL) //Tone(99, 50, envelope/p_fall, NULL) // 40 20
endphoneme endphoneme


// Redefine the length of vowels


phoneme i
CALL vi/i
length 150
endphoneme

phoneme E
CALL vi/E
length 150
endphoneme

phoneme a:
CALL vi/a:
length 150
endphoneme

phoneme @
CALL vi/@
length 150
endphoneme

phoneme @:
CALL vi/@:
length 150
endphoneme

phoneme O
CALL vi/O
length 150
FMT(vowel/0)
endphoneme

phoneme Oi
CALL vi/Oi
length 100
FMT(vdiph/ooi_2)
endphoneme

+ 97
- 0
phsource/ph_vietnam_sgn View File

//====================================================
// Vietnamese Phonemes - Make Sài gòn Dialect
//====================================================


phoneme 1 // ngang tone: level
stress
Tone(32, 34, envelope/p_level, NULL)
endphoneme


phoneme 2 // huyền tone: low falling
stress
Tone(35,20 , envelope/p_fall, NULL) //20
endphoneme


phoneme 3 // sắc Tone(rising
stress
Tone(40,60, envelope/p_rise, NULL) // 25 50
endphoneme


phoneme 4 // hỏi Tone(curve (dipping rising)
stress
Tone(30,50, envelope/p_rise, NULL) //envelope/vi_5amp) // 28,58
endphoneme


phoneme 5 // ngã tone: broken (creaking rising)
stress
Tone(30,50, envelope/p_rise, NULL) //20,80, envelope/p_214, envelope/vi_5amp) // 28,58
endphoneme


phoneme 6 // nặng Tone(drop (constricted)
stress
//length 150 // ignore because it make too short sound 75 // reduce the length of the vowel
Tone(10,5, envelope/p_512,NULL) // envelope/vi_6amp)
endphoneme


phoneme 7 // Tone(1 (ngang) at end of clause
stress
Tone(40, 20, envelope/p_fall, NULL)
endphoneme

// Redefine the length of vowels

phoneme i
CALL vi/i
length 150
endphoneme

phoneme E
CALL vi/E
length 150
endphoneme

phoneme a:
CALL vi/a:
length 150
FMT(vietnam/a)
endphoneme

phoneme @
CALL vi/@
length 150
endphoneme

phoneme @:
CALL vi/@:
length 150
endphoneme

phoneme O
CALL vi/O
length 150
FMT(vowel/0)
endphoneme

phoneme Oi
CALL vi/Oi
length 100
FMT(vdiph/ooi_2)
endphoneme

phoneme y
CALL vi/y
FMT(vowel/u#_4)
endphoneme

phoneme o
CALL vi/o
FMT(vowel/o_5)
endphoneme

+ 60
- 52
phsource/phonemes View File



VowelEnding(w/xw, -30) VowelEnding(w/xw, -30)


IF prevPh(isPause) THEN
FMT(w/_w)
IF prevPhW(isNasal) THEN
FMT(w/w)
ELSE ELSE
FMT(w/_w) FMT(w/_w)
ENDIF ENDIF




phoneme j phoneme j
liquid palatal
liquid palatal starttype #i
lengthmod 7 lengthmod 7


IF nextPhW(isVowel) THEN IF nextPhW(isVowel) THEN
Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20


IF nextPh(isPause) THEN IF nextPh(isPause) THEN
WAV(ufric/x, 110)
WAV(ufric/x_, 60)
ENDIF ENDIF
WAV(ufric/x_hr, 20) WAV(ufric/x_hr, 20)
endphoneme endphoneme
phonemetable ml hi phonemetable ml hi
include ph_malayalam include ph_malayalam


phonemetable te hi
include ph_telugu





phonemetable hu base phonemetable hu base
phonemetable vi-hue vi phonemetable vi-hue vi
include ph_vietnam_hue include ph_vietnam_hue


phonemetable vi-sgn vi
include ph_vietnam_sgn

phonemetable zhy base phonemetable zhy base
include ph_zh_yue include ph_zh_yue


phonemetable fa base phonemetable fa base
include ph_farsi include ph_farsi


// experimental

phonemetable ko base
include ph_korean

phonemetable kl base
include ph_greenlandic

phonemetable am base
include ph_amhari



//************************************************************************************** //**************************************************************************************
// The following lines are experimental, for future additions. // The following lines are experimental, for future additions.
// These langauges are not in a usable state. // These langauges are not in a usable state.
// These lines can be deleted. // These lines can be deleted.


phonemetable si hi
include ph_sinhala

phonemetable sl sk
include ph_slovenian

//phonemetable rw base2
//include ph_kinyarwanda
phonemetable rw base2
include ph_kinyarwanda


//phonemetable mr hi //phonemetable mr hi
//include ph_marathi //include ph_marathi
//phonemetable mn base //phonemetable mn base
//include ph_mongolian //include ph_mongolian


//phonemetable prs base
//include ph_dari
phonemetable prs base
include ph_dari

phonemetable sl sk
include ph_slovenian

phonemetable gd base
include ph_s_gaelic

phonemetable nso base
include ph_northern-sotho

phonemetable ht fr
include ph_haitian

phonemetable az tr
include ph_azerbaijani

phonemetable ak base
include ph_akan

phonemetable am base
include ph_amhari

phonemetable wo base
include ph_wolof


//phonemetable gd base
//include ph_s_gaelic
phonemetable dv hi
include ph_divehi


//phonemetable nso base
//include ph_northern-sotho
phonemetable te hi
include ph_telugu


//phonemetable ht fr
//include ph_haitian
phonemetable si hi
include ph_sinhala


//phonemetable az tr
//include ph_azerbaijani
phonemetable tn base
include ph_setswana


//phonemetable ak base
//include ph_akan


//phonemetable wo base
//include ph_wolof
phonemetable mt base
include ph_maltese


//phonemetable dv hi
//include ph_divehi
phonemetable bo hi
include ph_tibetan


//phonemetable tn base
//include ph_setswana
phonemetable kk base
include ph_kazakh


//phonemetable mt base
//include ph_maltese
phonemetable tt base
include ph_tatar


//phonemetable bo hi
//include ph_tibetan
phonemetable ko base
include ph_korean

phonemetable kl base
include ph_greenlandic


//phonemetable kk base
//include ph_kazakh
phonemetable ar base
include ph_arabic


//phonemetable tt base
//include ph_tatar
phonemetable gu hi
include ph_gujarati



BIN
phsource/ufric/x_.wav View File


BIN
phsource/ustop/t_hi.wav View File


BIN
phsource/vdiph/ooi View File


BIN
phsource/vdiph/ooi_2 View File


BIN
phsource/vdiph/ooi_3 View File


BIN
phsource/vdiph/ooi_4 View File


BIN
phsource/vowel/a_4 View File


BIN
phsource/vowel/u#_5 View File


BIN
phsource/vowel/u#_7 View File


BIN
phsource/vwl_en_us/aU@ View File


BIN
phsource/w/_w View File


BIN
phsource/w/w View File


+ 59
- 33
platforms/riscos/Makefile View File





# Toolflags: # Toolflags:
CCflags = -c -C90 -depend !Depend -IC: -throwback -memaccess -zM -L22-S22-L41
C++flags = -c -depend !Depend -IC: -throwback -zM -L22-S22-L41
CCflags = -c -C90 -depend !Depend -IC: -throwback -zM -memaccess -L22-S22-L41
C++flags = -c -depend !Depend -IC: -throwback -zM -memaccess -L22-S22-L41
Linkflags = -rmf -c++ -o $@ Linkflags = -rmf -c++ -o $@
ObjAsmflags = -throwback -NoCache -depend !Depend ObjAsmflags = -throwback -NoCache -depend !Depend
CMHGflags = CMHGflags =
# User-editable dependencies: # User-editable dependencies:


# Static dependencies: # Static dependencies:
@.o.speak_riscos: @.cpp.speak_riscos
c++ $(c++flags) -o @.o.speak_riscos @.cpp.speak_riscos
@.o.compiledict: @.cpp.compiledict
c++ $(c++flags) -o @.o.compiledict @.cpp.compiledict
@.o.dictionary: @.CPP.dictionary
c++ $(c++flags) -o @.o.dictionary @.CPP.dictionary
@.o.intonation: @.CPP.intonation
c++ $(c++flags) -o @.o.intonation @.CPP.intonation
@.o.numbers: @.CPP.numbers
c++ $(c++flags) -o @.o.numbers @.CPP.numbers
@.o.phonemelist: @.CPP.phonemelist
c++ $(c++flags) -o @.o.phonemelist @.CPP.phonemelist
@.o.readclause: @.CPP.readclause
c++ $(c++flags) -o @.o.readclause @.CPP.readclause
@.o.setlengths: @.CPP.setlengths
c++ $(c++flags) -o @.o.setlengths @.CPP.setlengths
@.o.synthdata: @.CPP.synthdata
c++ $(c++flags) -o @.o.synthdata @.CPP.synthdata
@.o.synth_mbrola: @.CPP.synth_mbrola
c++ $(c++flags) -o @.o.synth_mbrola @.CPP.synth_mbrola
@.o.synthesize: @.CPP.synthesize
c++ $(c++flags) -o @.o.synthesize @.CPP.synthesize
@.o.translate: @.CPP.translate
c++ $(c++flags) -o @.o.translate @.CPP.translate
@.o.tr_languages: @.CPP.tr_languages
c++ $(c++flags) -o @.o.tr_languages @.CPP.tr_languages
@.o.voices: @.CPP.voices
c++ $(c++flags) -o @.o.voices @.CPP.voices
@.o.wavegen: @.CPP.wavegen
c++ $(c++flags) -o @.o.wavegen @.CPP.wavegen
@.o.speak_riscos: @.c.speak_riscos
cc $(ccflags) -o @.o.speak_riscos @.c.speak_riscos
@.o.compiledict: @.c.compiledict
cc $(ccflags) -o @.o.compiledict @.c.compiledict
@.o.dictionary: @.c.dictionary
cc $(ccflags) -o @.o.dictionary @.c.dictionary
@.o.intonation: @.c.intonation
cc $(ccflags) -o @.o.intonation @.c.intonation
@.o.numbers: @.c.numbers
cc $(ccflags) -o @.o.numbers @.c.numbers
@.o.phonemelist: @.c.phonemelist
cc $(ccflags) -o @.o.phonemelist @.c.phonemelist
@.o.readclause: @.c.readclause
cc $(ccflags) -o @.o.readclause @.c.readclause
@.o.setlengths: @.c.setlengths
cc $(ccflags) -o @.o.setlengths @.c.setlengths
@.o.synthdata: @.c.synthdata
cc $(ccflags) -o @.o.synthdata @.c.synthdata
@.o.synth_mbrola: @.c.synth_mbrola
cc $(ccflags) -o @.o.synth_mbrola @.c.synth_mbrola
@.o.synthesize: @.c.synthesize
cc $(ccflags) -o @.o.synthesize @.c.synthesize
@.o.translate: @.c.translate
cc $(ccflags) -o @.o.translate @.c.translate
@.o.tr_languages: @.c.tr_languages
cc $(ccflags) -o @.o.tr_languages @.c.tr_languages
@.o.voices: @.c.voices
cc $(ccflags) -o @.o.voices @.c.voices
@.o.wavegen: @.c.wavegen
cc $(ccflags) -o @.o.wavegen @.c.wavegen
@.o.assemb: @.s.assemb @.o.assemb: @.s.assemb
objasm $(objasmflags) -from @.s.assemb -to @.o.assemb objasm $(objasmflags) -from @.s.assemb -to @.o.assemb


# Dynamic dependencies: # Dynamic dependencies:

o.wavegen: c.wavegen
o.wavegen: h.StdAfx
o.wavegen: h.speak_lib
o.wavegen: h.speech
o.wavegen: h.phoneme
o.wavegen: h.synthesize
o.wavegen: h.voice
o.wavegen: h.sintab
o.speak_riscos: c.speak_riscos
o.speak_riscos: C:h.kernel
o.speak_riscos: h.speech
o.speak_riscos: h.speak_lib
o.speak_riscos: h.phoneme
o.speak_riscos: h.synthesize
o.speak_riscos: h.voice
o.speak_riscos: h.translate
o.synthdata: c.synthdata
o.synthdata: h.StdAfx
o.synthdata: h.wctype
o.synthdata: h.speak_lib
o.synthdata: h.speech
o.synthdata: h.phoneme
o.synthdata: h.synthesize
o.synthdata: h.voice
o.synthdata: h.translate
o.synthdata: h.wave
o.synthdata: C:h.stdint

platforms/riscos/cpp/speak_riscos → platforms/riscos/c/speak_riscos View File

#define os_X 0x20000 #define os_X 0x20000


// interface to the assembler section // interface to the assembler section
extern "C" {
//extern "C" {
extern void DMA_Handler(void); extern void DMA_Handler(void);




extern int sound_handler(_kernel_swi_regs *r, void *pw); extern int sound_handler(_kernel_swi_regs *r, void *pw);
extern int sound_entry(_kernel_swi_regs *r, void *pw); extern int sound_entry(_kernel_swi_regs *r, void *pw);


}
//}


extern int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume); extern int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume);
extern void RiscosOpenSound(); extern void RiscosOpenSound();
char wavefile[120]; char wavefile[120];
char textbuffile[L_tmpnam]; char textbuffile[L_tmpnam];
int sample_rate_index; // current value int sample_rate_index; // current value
int current_voice_num=0;
int sample_rate_doubled = 0; // 1= write audio data at 2x sample rate
char current_voice_name[40] = {0};
int n_voice_files = 0; int n_voice_files = 0;
int n_voice_variant_files = 0; int n_voice_variant_files = 0;


// output sound buffer, 2 bytes per sample // output sound buffer, 2 bytes per sample
static unsigned short SoundBuf[4096];
static short SoundBuf[4096];
static void *module_data; static void *module_data;
static int callback_inhibit = 0; static int callback_inhibit = 0;
static int more_text=0; static int more_text=0;
"--punct=\"<characters>\"\n" "--punct=\"<characters>\"\n"
"\t Speak the names of punctuation characters during speaking. If\n" "\t Speak the names of punctuation characters during speaking. If\n"
"\t =<characters> is omitted, all punctuation is spoken.\n" "\t =<characters> is omitted, all punctuation is spoken.\n"
"--voices=<language>\n"
"\t List the available voices for the specified language.\n"
"\t If <language> is omitted, then list all voices.\n"
"--voices=\n"
"\t List the available voices. (More voices can be installed from the main eSpeak distribution)\n"
"--voices=variant\n"
"\t List the available voice variants which can be combined with voices, eg. en+f3\n"
"-k <integer>\n" "-k <integer>\n"
"\t Indicate capital letters with: 1=sound, 2=the word \"capitals\",\n" "\t Indicate capital letters with: 1=sound, 2=the word \"capitals\",\n"
"\t higher values = a pitch increase (try -k20).\n"; "\t higher values = a pitch increase (try -k20).\n";
} /* end of GetFileLength */ } /* end of GetFileLength */




void MarkerEvent(int type, unsigned int char_position, int value, int value2, unsigned char *out_ptr)
{
}


void ReadVoiceNames2(char *directory) void ReadVoiceNames2(char *directory)
{//================================== {//==================================


path_len = strlen(directory); path_len = strlen(directory);


voice_variant_names[0] = "(none)";
n_voice_variant_files = 1;

while(regs.r[3] > 0) while(regs.r[3] > 0)
{ {
error = _kernel_swi(0x0c+os_X,&regs,&regs); /* OS_GBPB 10, read directory entries */ error = _kernel_swi(0x0c+os_X,&regs,&regs); /* OS_GBPB 10, read directory entries */






void MarkerEvent(int type, unsigned int char_position, int value, unsigned char *out_ptr)
{//======================================================================================
void MarkerEvent(int type, unsigned int char_position, int value, int value2, unsigned char *out_ptr)
{//=================================================================================================
// Do nothing in the command-line version. // Do nothing in the command-line version.
} // end of MarkerEvent } // end of MarkerEvent


{ {
int c; int c;
int ix; int ix;
char *vname;
static static_length=0; static static_length=0;
static int user_token=0; /* increment for each call of translate() */ static int user_token=0; /* increment for each call of translate() */
_kernel_swi_regs regs; _kernel_swi_regs regs;


option_endpause = 1; option_endpause = 1;


if((voice_num >= 0) && (voice_num != current_voice_num) && (voice_num < N_VOICE_NAMES))
vname = voice_names[voice_num];
if((voice_num >= 0) && (strcmp(vname, current_voice_name) != 0) && (voice_num < N_VOICE_NAMES))
{ {
SetVoiceByName(voice_names[voice_num]); SetVoiceByName(voice_names[voice_num]);
WavegenSetVoice(voice);
WavegenSetVoice(voice);
} }
current_voice_num = voice_num;
strcmp(current_voice_name, vname);


/* don't count CR as terminator if length is specified */ /* don't count CR as terminator if length is specified */
if(len > 0) terminator = 0; if(len > 0) terminator = 0;
option_waveout = 0; option_waveout = 0;
option_multibyte = 0; // auto option_multibyte = 0; // auto
option_capitals = 0; option_capitals = 0;
option_punctuation = 0;
option_punctlist[0] = 0;
if(reg2 >= 0)
{
// not using SWI_SPEAK+14 to set voice and punctiation option
option_punctuation = 0;
option_punctlist[0] = 0;
}
else
{
SetParameter(espeakPUNCTUATION,option_punctuation,0);
}
} /* end of set_say_options */ } /* end of set_say_options */




case 3: case 3:
// translate into phonemes // translate into phonemes
use_ipa = 0; use_ipa = 0;
if((r[2] >= 1) && (use_ipa <= 3))
if((r[2] >= 1) && (r[2] <= 5))
use_ipa = r[2]; use_ipa = r[2];
TranslateClause(translator,NULL,(char *)r[1],NULL,NULL); TranslateClause(translator,NULL,(char *)r[1],NULL,NULL);
GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), use_ipa); GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), use_ipa);
if(r[1] < N_VOICE_NAMES) if(r[1] < N_VOICE_NAMES)
{ {
SetVoiceByName(voice_names[r[1]]); SetVoiceByName(voice_names[r[1]]);
current_voice_num = r[1];
strcmp(current_voice_name, voice_names[r[1]]);
WavegenSetVoice(voice); WavegenSetVoice(voice);
} }
break; break;
int value; int value;
int value2; int value2;
int q_length; int q_length;
char *p;
int ix;
value = r[0]; value = r[0];


switch(swi_no) switch(swi_no)


case 0: // ready ? case 0: // ready ?
// returns the index into the source text of the currently speaking word // returns the index into the source text of the currently speaking word
if(current_source_index > 0)
r[1] = current_source_index-1;
ix = current_source_index & 0x7ff;
if(ix > 0)
r[1] = ix-1;
else else
r[1] = current_source_index; /* source index */
r[1] = ix; /* source index */
r[2] = 0; /* source tag */ r[2] = 0; /* source tag */
r[3] = 0; /* for future expansion */ r[3] = 0; /* for future expansion */
r[4] = 0; r[4] = 0;
r[5] = 0; r[5] = 0;


if(WcmdqUsed() < 5)
if((WcmdqUsed() < 5) && (more_text == 0))
{ {
r[0] = -1; /* ready, or nearly */ r[0] = -1; /* ready, or nearly */
} }
break; break;


case 14: // set voice by name case 14: // set voice by name
SetVoiceByName((char *)r[0]);
WavegenSetVoice(voice);
p = (char *)r[0];
if(strcmp(p, current_voice_name) != 0)
{
SetVoiceByName(p);
WavegenSetVoice(voice);
strcpy(current_voice_name, p);
}
option_punctuation = 0;
if(r[1] != 0)
{
p = (char *)r[1];
if(p[0] == 0)
option_punctuation = 1;
else
{
for(ix=0; ix < N_PUNCTLIST; ix++)
{
if((option_punctlist[ix] = p[ix]) == 0)
break;
}
option_punctlist[N_PUNCTLIST-1] = 0;
option_punctuation = 2;
}
}
break; break;
} }
return(NULL); return(NULL);
const espeak_VOICE **voices; const espeak_VOICE **voices;
espeak_VOICE voice_select; espeak_VOICE voice_select;


static char genders[4] = {' ','M','F',' '};
static char genders[4] = {'-','M','F','-'};


if(language[0] == '=') if(language[0] == '=')
{ {
{ {
count = 0; count = 0;
p = v->languages; p = v->languages;
if(memcmp(language,"=variant",8)==0)
{
if(strcmp(p+1,"variant") != 0)
continue;
}
else
if(language[0] == 0)
{
if(strcmp(p+1,"variant") == 0)
continue;
}

while(*p != 0) while(*p != 0)
{ {
len = strlen(p+1); len = strlen(p+1);
lang_name = p+1; lang_name = p+1;



if(v->age == 0) if(v->age == 0)
strcpy(age_buf," "); strcpy(age_buf," ");
else else
count++; count++;
p += len+2; p += len+2;
} }
// if(scores)
// fprintf(f_out,"%3d ",v->score);
fputc('\n',f_out); fputc('\n',f_out);
} }
} // end of DisplayVoices } // end of DisplayVoices
int option_index = 0; int option_index = 0;
int c; int c;
int value; int value;
int speed;
int amp;
int wordgap;
int speed = 175;
int amp = 100;
int wordgap = 0;
int speaking = 0; int speaking = 0;
int flag_stdin = 0; int flag_stdin = 0;
int flag_compile = 0; int flag_compile = 0;
char command[80]; char command[80];
char *p; char *p;
int ix; int ix;
int quiet;
int quiet = 0;


voicename[0] = 0; voicename[0] = 0;
wavefile[0] = 0; wavefile[0] = 0;
filename[0] = 0; filename[0] = 0;
option_ssml = 0;
option_linelength = 0; option_linelength = 0;
option_phonemes = 0; option_phonemes = 0;
option_waveout = 0; option_waveout = 0;
quiet = 0;
option_multibyte = 0; // auto option_multibyte = 0; // auto
option_capitals = 0; option_capitals = 0;
option_punctuation = 0; option_punctuation = 0;


case 'k': case 'k':
option_capitals = param_number(&p); option_capitals = param_number(&p);
SetParameter(espeakCAPITALS,option_capitals,0);
break; break;


case 'x': case 'x':


case 'a': case 'a':
amp = param_number(&p); amp = param_number(&p);
SetParameter(espeakVOLUME,amp,0);
break; break;


case 's': case 's':
speed = param_number(&p); speed = param_number(&p);
SetParameter(espeakRATE,speed,0);
break; break;


case 'g': case 'g':
wordgap = param_number(&p); wordgap = param_number(&p);
SetParameter(espeakWORDGAP,wordgap,0);
break; break;


case 'v': case 'v':
option_punctlist[N_PUNCTLIST-1] = 0; option_punctlist[N_PUNCTLIST-1] = 0;
option_punctuation = 2; option_punctuation = 2;
} }
SetParameter(espeakPUNCTUATION,option_punctuation,0);
} }
else else
if(memcmp(command,"version",7)==0) if(memcmp(command,"version",7)==0)
} }
} }


SetParameter(espeakCAPITALS,option_capitals,0);
SetParameter(espeakWORDGAP,wordgap,0);
SetParameter(espeakPUNCTUATION,option_punctuation,0);
SetParameter(espeakRATE,speed,0);
SetParameter(espeakVOLUME,amp,0);

if((option_phonemes > 1) && !option_waveout) if((option_phonemes > 1) && !option_waveout)
quiet = 1; // can't call sprintf() during callback quiet = 1; // can't call sprintf() during callback


int size; int size;
int *dma_buf; int *dma_buf;
int x; int x;
int x2;
int ix; int ix;


module_data = (int *)pw; module_data = (int *)pw;
dma_buf = (int *)r->r[1]; dma_buf = (int *)r->r[1];
size = (r->r[2] - r->r[1])/4; size = (r->r[2] - r->r[1])/4;
FillSoundBuf(size);
if(sample_rate_doubled == 0)
{
FillSoundBuf(size);


for(ix=0; ix<size; ix++)
for(ix=0; ix<size; ix++)
{
x = SoundBuf[ix] & 0xffff;
dma_buf[ix] = x + (x << 16);
}
}
else
{ {
x = SoundBuf[ix];
dma_buf[ix] = x + (x << 16);
// write audio data at 2x sample rate
size = size /2;
FillSoundBuf(size);

for(ix=0; ix<size; ix++)
{
x = SoundBuf[ix] & 0xffff;
dma_buf[ix*2] = x + (x << 16);
if((ix+1) < size)
{
x = ((SoundBuf[ix] + SoundBuf[ix+1]) / 2) & 0xffff; // interpolate
}
dma_buf[ix*2 + 1] = x + (x << 16);
}
} }


n_queue = WcmdqUsed(); n_queue = WcmdqUsed();
int srate; int srate;
int n_srix; int n_srix;
int ix; int ix;
int double_rate_ix = -1;
int nearest_ix;
int nearest_diff = 0x7fffffff;
int diff;
_kernel_swi_regs regs; _kernel_swi_regs regs;
_kernel_oserror *error; _kernel_oserror *error;


sound_mode = 0; sound_mode = 0;
sample_rate_doubled = 0;
regs.r[0] = 0; regs.r[0] = 0;
error = _kernel_swi(0x40144+os_X,&regs,&regs); error = _kernel_swi(0x40144+os_X,&regs,&regs);
sound_mode = regs.r[0]; sound_mode = regs.r[0];
/* 16 bit sound, find sample rate index */ /* 16 bit sound, find sample rate index */
regs.r[0] = 0; regs.r[0] = 0;
regs.r[1] = 0; regs.r[1] = 0;
_kernel_swi(0x40146,&regs,&regs);
_kernel_swi(0x40146,&regs,&regs); // Sound_SampleRate
n_srix = regs.r[1]; n_srix = regs.r[1];


regs.r[0] = 1; regs.r[0] = 1;
regs.r[0] = 2; regs.r[0] = 2;
regs.r[1] = ix; regs.r[1] = ix;
_kernel_swi(0x40146,&regs,&regs); _kernel_swi(0x40146,&regs,&regs);
srate = regs.r[2];
if(srate >= (sample_rate*1024))
srate = regs.r[2] / 1024;
if(srate == sample_rate)
{ {
return(ix); return(ix);
} }
if(srate == sample_rate*2)
{
double_rate_ix = ix;
}
if((diff = abs(sample_rate - srate)) < nearest_diff)
{
nearest_diff = diff;
nearest_ix = ix;
}
} }
} }
return(14); // this was the index for 22050
if(double_rate_ix >= 0)
{
// matching sample rate is not available, but double this rate is.
sample_rate_doubled = 1;
return(double_rate_ix);
}
else
{
return(nearest_ix);
}
} // end of InitSound16 } // end of InitSound16




// other characters give the correct results with iswalpha() etc. // other characters give the correct results with iswalpha() etc.


static char *locale = "ISO8859-1"; static char *locale = "ISO8859-1";
setlocale(LC_CTYPE,locale);
setlocale(LC_CTYPE,locale);


module_data = pw; module_data = pw;



+ 14
- 14
platforms/riscos/copysource View File

copy <obey$dir>.^.src.compiledict/cpp <obey$dir>.cpp.compiledict fq~c
copy <obey$dir>.^.src.dictionary/cpp <obey$dir>.cpp.dictionary fq~c
copy <obey$dir>.^.src.intonation/cpp <obey$dir>.cpp.intonation fq~c
copy <obey$dir>.^.src.numbers/cpp <obey$dir>.cpp.numbers fq~c
copy <obey$dir>.^.src.phonemelist/cpp <obey$dir>.cpp.phonemelist fq~c
copy <obey$dir>.^.src.readclause/cpp <obey$dir>.cpp.readclause fq~c
copy <obey$dir>.^.src.setlengths/cpp <obey$dir>.cpp.setlengths fq~c
copy <obey$dir>.^.src.synthdata/cpp <obey$dir>.cpp.synthdata fq~c
copy <obey$dir>.^.src.synth_mbrola/cpp <obey$dir>.cpp.synth_mbrola fq~c
copy <obey$dir>.^.src.synthesize/cpp <obey$dir>.cpp.synthesize fq~c
copy <obey$dir>.^.src.translate/cpp <obey$dir>.cpp.translate fq~c
copy <obey$dir>.^.src.tr_languages/cpp <obey$dir>.cpp.tr_languages fq~c
copy <obey$dir>.^.src.voices/cpp <obey$dir>.cpp.voices fq~c
copy <obey$dir>.^.src.wavegen/cpp <obey$dir>.cpp.wavegen fq~c
copy <obey$dir>.^.src.compiledict/cpp <obey$dir>.c.compiledict fq~c
copy <obey$dir>.^.src.dictionary/cpp <obey$dir>.c.dictionary fq~c
copy <obey$dir>.^.src.intonation/cpp <obey$dir>.c.intonation fq~c
copy <obey$dir>.^.src.numbers/cpp <obey$dir>.c.numbers fq~c
copy <obey$dir>.^.src.phonemelist/cpp <obey$dir>.c.phonemelist fq~c
copy <obey$dir>.^.src.readclause/cpp <obey$dir>.c.readclause fq~c
copy <obey$dir>.^.src.setlengths/cpp <obey$dir>.c.setlengths fq~c
copy <obey$dir>.^.src.synthdata/cpp <obey$dir>.c.synthdata fq~c
copy <obey$dir>.^.src.synth_mbrola/cpp <obey$dir>.c.synth_mbrola fq~c
copy <obey$dir>.^.src.synthesize/cpp <obey$dir>.c.synthesize fq~c
copy <obey$dir>.^.src.translate/cpp <obey$dir>.c.translate fq~c
copy <obey$dir>.^.src.tr_languages/cpp <obey$dir>.c.tr_languages fq~c
copy <obey$dir>.^.src.voices/cpp <obey$dir>.c.voices fq~c
copy <obey$dir>.^.src.wavegen/cpp <obey$dir>.c.wavegen fq~c


copy <obey$dir>.^.src.phoneme/h <obey$dir>.h.phoneme fq~c copy <obey$dir>.^.src.phoneme/h <obey$dir>.h.phoneme fq~c
copy <obey$dir>.^.src.sintab/h <obey$dir>.h.sintab fq~c copy <obey$dir>.^.src.sintab/h <obey$dir>.h.sintab fq~c

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

[Setup] [Setup]
AppName=eSpeak AppName=eSpeak
AppVerName=eSpeak version 1.47.04
AppVerName=eSpeak version 1.47.08
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

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

[Setup] [Setup]
AppName=eSpeakEdit AppName=eSpeakEdit
AppVerName=eSpeakEdit version 1.47.04
AppVerName=eSpeakEdit version 1.47.08
DefaultDirName={pf}\eSpeak DefaultDirName={pf}\eSpeak
DefaultGroupName=eSpeak DefaultGroupName=eSpeak
OutputBaseFilename=setup_espeakedit OutputBaseFilename=setup_espeakedit

+ 6
- 1
src/compiledata.cpp View File

static void InstnPlusPhoneme(int instn) static void InstnPlusPhoneme(int instn)
{//==================================== {//====================================
int phcode; int phcode;
DecThenCount();


phcode = NextItemBrackets(tPHONEMEMNEM,0); phcode = NextItemBrackets(tPHONEMEMNEM,0);
*prog_out++ = instn + phcode; *prog_out++ = instn + phcode;
case i_CHANGE_IF+2: case i_CHANGE_IF+2:
case i_CHANGE_IF+3: case i_CHANGE_IF+3:
InstnPlusPhoneme(keyword << 8); InstnPlusPhoneme(keyword << 8);
DecThenCount();
break; break;


case i_PAUSE_BEFORE: case i_PAUSE_BEFORE:
value = NextItemMax(255); value = NextItemMax(255);
*prog_out++ = (i_PAUSE_BEFORE << 8) + value; *prog_out++ = (i_PAUSE_BEFORE << 8) + value;
DecThenCount();
break; break;


case i_PAUSE_AFTER: case i_PAUSE_AFTER:
value = NextItemMax(255); value = NextItemMax(255);
*prog_out++ = (i_PAUSE_AFTER << 8) + value; *prog_out++ = (i_PAUSE_AFTER << 8) + value;
DecThenCount();
break; break;


case i_SET_LENGTH: case i_SET_LENGTH:
{ {
*prog_out++ = (ipa_buf[ix+start] << 8) + (ipa_buf[ix+start+1] & 0xff); *prog_out++ = (ipa_buf[ix+start] << 8) + (ipa_buf[ix+start+1] & 0xff);
} }
DecThenCount();
break; break;
} }
break; break;


case kCALLPH: case kCALLPH:
CallPhoneme(); CallPhoneme();
DecThenCount();
break; break;


case kFMT: case kFMT:
break; break;


case kTONESPEC: case kTONESPEC:
DecThenCount();
endphoneme = CompileToneSpec(); endphoneme = CompileToneSpec();
break; break;



+ 3
- 2
src/compiledict.cpp View File

{"$stem", 0x30}, // must have a suffix {"$stem", 0x30}, // must have a suffix
{"$atend", 0x31}, // use this pronunciation if at end of clause {"$atend", 0x31}, // use this pronunciation if at end of clause
{"$atstart", 0x32}, // use this pronunciation at start of clause {"$atstart", 0x32}, // use this pronunciation at start of clause
{"$native", 0x33}, // not if we've switched translators


// 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
ix = utf8_in(&c2,p); ix = utf8_in(&c2,p);
if(c2 == 0) if(c2 == 0)
break; break;
if(iswupper(c2))
if(iswupper2(c2))
{ {
utf8_out(towlower(c2),p);
utf8_out(towlower2(c2),p);
} }
else else
{ {

+ 60
- 16
src/dictionary.cpp View File

unsigned short ipa1[96] = { unsigned short ipa1[96] = {
0x20,0x21,0x22,0x2b0,0x24,0x25,0x0e6,0x2c8,0x28,0x27e,0x2a,0x2b,0x2cc,0x2d,0x2e,0x2f, 0x20,0x21,0x22,0x2b0,0x24,0x25,0x0e6,0x2c8,0x28,0x27e,0x2a,0x2b,0x2cc,0x2d,0x2e,0x2f,
0x252,0x31,0x32,0x25c,0x34,0x35,0x36,0x37,0x275,0x39,0x2d0,0x2b2,0x3c,0x3d,0x3e,0x294, 0x252,0x31,0x32,0x25c,0x34,0x35,0x36,0x37,0x275,0x39,0x2d0,0x2b2,0x3c,0x3d,0x3e,0x294,
0x259,0x251,0x3b2,0xe7,0xf0,0x25b,0x46,0x262,0x127,0x26a,0x25f,0x4b,0x29f,0x271,0x14b,0x254,
0x259,0x251,0x3b2,0xe7,0xf0,0x25b,0x46,0x262,0x127,0x26a,0x25f,0x4b,0x26b,0x271,0x14b,0x254,
0x3a6,0x263,0x280,0x283,0x3b8,0x28a,0x28c,0x153,0x3c7,0xf8,0x292,0x32a,0x5c,0x5d,0x5e,0x5f, 0x3a6,0x263,0x280,0x283,0x3b8,0x28a,0x28c,0x153,0x3c7,0xf8,0x292,0x32a,0x5c,0x5d,0x5e,0x5f,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x261,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x261,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x303,0x7f 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x303,0x7f






void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa)
{//=========================================================================
/* Can be called after a clause has been translated into phonemes, in order
void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int phoneme_mode)
{//===============================================================================
/* Called after a clause has been translated into phonemes, in order
to display the clause in phoneme mnemonic form. to display the clause in phoneme mnemonic form.

phoneme_mode bits 0-3: 0=only phoneme names, 1=ties, 2=ZWJ, 3=underscore separator
bit 4: 0=eSpeak phoneme names, 1=IPA
*/ */


int ix; int ix;
char *buf; char *buf;
int count; int count;
int flags; int flags;
int use_ipa;
int use_tie;
int separate_phonemes = 0;
char phon_buf[30]; char phon_buf[30];
char phon_buf2[30]; char phon_buf2[30];
PHONEME_LIST *plist; PHONEME_LIST *plist;
static const char *stress_chars = "==,,''"; static const char *stress_chars = "==,,''";
static const int char_tie[] = {0x0361, 0x200d}; // combining-double-inverted-breve, zero-width-joiner static const int char_tie[] = {0x0361, 0x200d}; // combining-double-inverted-breve, zero-width-joiner


use_ipa = phoneme_mode & 0x10;
use_tie = phoneme_mode & 0x0f;

if(use_tie >= 3)
{
// separate individual phonemes with underscores
separate_phonemes = '_';
use_tie = 0;
}

if(phon_out != NULL) if(phon_out != NULL)
{ {
for(ix=1; ix<(n_phoneme_list-2); ix++) for(ix=1; ix<(n_phoneme_list-2); ix++)
buf = phon_buf; buf = phon_buf;


plist = &phoneme_list[ix]; plist = &phoneme_list[ix];

WritePhMnemonic(phon_buf2, plist->ph, plist, use_ipa, &flags);
if(plist->newword) if(plist->newword)
*buf++ = ' '; *buf++ = ' ';
else
{
if((separate_phonemes != 0) && (ix > 1))
{
utf8_in(&c, phon_buf2);
if((c < 0x2b0) || (c > 0x36f)) // not if the phoneme starts with a superscript letter
{
*buf++ = separate_phonemes;
}
}
}


if(plist->synthflags & SFLAG_SYLLABLE) if(plist->synthflags & SFLAG_SYLLABLE)
{ {
if(c != 0) if(c != 0)
{ {
buf += utf8_out(c, buf); buf += utf8_out(c, buf);
// if(separate_phonemes)
// *buf++ = separate_phonemes;
} }
} }
} }


flags = 0; flags = 0;
WritePhMnemonic(phon_buf2, plist->ph, plist, use_ipa, &flags);
count = 0; count = 0;
for(p=phon_buf2; *p != 0;) for(p=phon_buf2; *p != 0;)
{ {
p += utf8_in(&c, p); p += utf8_in(&c, p);
if(use_ipa > 1)
if(use_tie > 0)
{ {
// look for non-inital alphabetic character, but not diacritic, superscript etc. // look for non-inital alphabetic character, but not diacritic, superscript etc.
if((count>0) && !(flags & (1 << (count-1))) && ((c < 0x2b0) || (c > 0x36f)) && iswalpha(c))
if((count>0) && !(flags & (1 << (count-1))) && ((c < 0x2b0) || (c > 0x36f)) && iswalpha2(c))
{ {
buf += utf8_out(char_tie[use_ipa-2], buf);
buf += utf8_out(char_tie[use_tie-1], buf);
} }
} }
buf += utf8_out(c, buf); buf += utf8_out(c, buf);


if(count==0) if(count==0)
c1 = c; c1 = c;
count++;

if((c == '\'') && (tr->langopts.param[LOPT_UNPRONOUNCABLE] == 3))
{
// don't count apostrophe
}
else
count++;


if(IsVowel(tr, c)) if(IsVowel(tr, c))
{ {
break; break;
} }


if((c != '\'') && !iswalpha(c))
if((c != '\'') && !iswalpha2(c))
return(0); return(0);
} }


if(!(control & 1) && ((ph = phoneme_tab[*p]) != NULL)) if(!(control & 1) && ((ph = phoneme_tab[*p]) != NULL))
{ {


if(ph->type == phSTRESS)
ph = phoneme_tab[p[1]];
while((ph->type == phSTRESS) || (*p == phonEND_WORD))
{
p++;
ph = phoneme_tab[p[0]];
}


#ifdef deleted #ifdef deleted
int gap = tr->langopts.word_gap & 0x700; int gap = tr->langopts.word_gap & 0x700;
break; break;


case RULE_NONALPHA: case RULE_NONALPHA:
if(!iswalpha(letter_w))
if(!iswalpha2(letter_w))
{ {
add_points = (21-distance_right); add_points = (21-distance_right);
post_ptr += letter_xbytes; post_ptr += letter_xbytes;
break; break;


case RULE_NONALPHA: case RULE_NONALPHA:
if(!iswalpha(letter_w))
if(!iswalpha2(letter_w))
{ {
add_points = (21-distance_right); add_points = (21-distance_right);
pre_ptr -= letter_xbytes; pre_ptr -= letter_xbytes;
if(tr->letter_bits_offset > 0) if(tr->letter_bits_offset > 0)
{ {
// not a Latin alphabet, switch to the default Latin alphabet language // not a Latin alphabet, switch to the default Latin alphabet language
if((letter <= 0x241) && iswalpha(letter))
if((letter <= 0x241) && iswalpha2(letter))
{ {
sprintf(phonemes,"%c%s",phonSWITCH,tr->langopts.ascii_language); sprintf(phonemes,"%c%s",phonSWITCH,tr->langopts.ascii_language);
return(0); return(0);
continue; continue;
} }
} }
if(dictionary_flags2 & FLAG_NATIVE)
{
if(tr != translator)
continue; // don't use if we've switched translators
}
if(dictionary_flags & FLAG_ALT2_TRANS) if(dictionary_flags & FLAG_ALT2_TRANS)
{ {
// language specific // language specific
{//============================================== {//==============================================
char buf[100]; char buf[100];
static unsigned int flags[2]; static unsigned int flags[2];
char *word1 = (char *)word;


flags[0] = flags[1] = 0; flags[0] = flags[1] = 0;
char *word1 = (char *)word;
LookupDictList(tr, &word1, buf, flags, 0, NULL); LookupDictList(tr, &word1, buf, flags, 0, NULL);
return(flags[0]); return(flags[0]);
} }

+ 13
- 9
src/espeak.cpp View File

#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <ctype.h>
#ifndef NEED_GETOPT #ifndef NEED_GETOPT
#include <getopt.h> #include <getopt.h>
#endif #endif
"\t Compile pronunciation rules and dictionary from the current\n" "\t Compile pronunciation rules and dictionary from the current\n"
"\t directory. <voice name> specifies the language\n" "\t directory. <voice name> specifies the language\n"
"--ipa Write phonemes to stdout using International Phonetic Alphabet\n" "--ipa Write phonemes to stdout using International Phonetic Alphabet\n"
"\t --ipa=1 Use ties, --ipa=2 Use ZWJ\n"
"\t --ipa=1 Use ties, --ipa=2 Use ZWJ, --ipa=3 Separate with _\n"
"--path=\"<path>\"\n" "--path=\"<path>\"\n"
"\t Specifies the directory containing the espeak-data directory\n" "\t Specifies the directory containing the espeak-data directory\n"
"--pho Write mbrola phoneme data (.pho) to stdout or to the file in --phonout\n" "--pho Write mbrola phoneme data (.pho) to stdout or to the file in --phonout\n"
if(path == NULL) if(path == NULL)
return(2); return(2);


if(path[0] == 0)
return(0);

if(strcmp(path,"stdout")==0)
f_wavfile = stdout;
else
f_wavfile = fopen(path,"wb");
while(isspace(*path)) path++;


f_wavfile = NULL;
if(path[0] != 0)
{
if(strcmp(path,"stdout")==0)
f_wavfile = stdout;
else
f_wavfile = fopen(path,"wb");
}
if(f_wavfile == NULL) if(f_wavfile == NULL)
{ {
fprintf(stderr,"Can't write to: '%s'\n",path); fprintf(stderr,"Can't write to: '%s'\n",path);
{ {
value = -1; value = -1;
sscanf(optarg2,"%d",&value); sscanf(optarg2,"%d",&value);
if((value<0) || (value>2))
if((value<0) || (value>3))
{ {
fprintf(stderr,"Bad value for -ipa=\n"); fprintf(stderr,"Bad value for -ipa=\n");
value = 0; value = 0;

+ 8
- 1
src/espeakedit.cpp View File

EVT_MENU(MENU_OPT_SPEED, MyFrame::OnOptions) EVT_MENU(MENU_OPT_SPEED, MyFrame::OnOptions)
EVT_MENU(MENU_OPT_PUNCT, MyFrame::OnOptions) EVT_MENU(MENU_OPT_PUNCT, MyFrame::OnOptions)
EVT_MENU(MENU_OPT_SPELL, MyFrame::OnOptions) EVT_MENU(MENU_OPT_SPELL, MyFrame::OnOptions)
EVT_MENU(MENU_OPT_SPELL2, MyFrame::OnOptions)
EVT_MENU(MENU_PATH0, MyFrame::OnOptions) EVT_MENU(MENU_PATH0, MyFrame::OnOptions)
EVT_MENU(MENU_PATH1, MyFrame::OnOptions) EVT_MENU(MENU_PATH1, MyFrame::OnOptions)
EVT_MENU(MENU_PATH2, MyFrame::OnOptions) EVT_MENU(MENU_PATH2, MyFrame::OnOptions)
break; break;


case MENU_OPT_SPELL: case MENU_OPT_SPELL:
transldlg->t_source->SetValue(_T("<say-as interpret-as=\"characters\">\n"));
transldlg->t_source->SetInsertionPointEnd();
notebook->SetSelection(1);
break;

case MENU_OPT_SPELL2:
transldlg->t_source->SetValue(_T("<say-as interpret-as=\"tts:char\">\n")); transldlg->t_source->SetValue(_T("<say-as interpret-as=\"tts:char\">\n"));
transldlg->t_source->SetInsertionPointEnd(); transldlg->t_source->SetInsertionPointEnd();
notebook->SetSelection(1); notebook->SetSelection(1);


case MENU_PATH0: case MENU_PATH0:
string = wxFileSelector(_T("Master phonemes file"),wxFileName(path_phfile).GetPath(), string = wxFileSelector(_T("Master phonemes file"),wxFileName(path_phfile).GetPath(),
_T(""),_T(""),_T("*"),wxOPEN);
_T("phonemes"),_T(""),_T("*"),wxOPEN);
if(!string.IsEmpty()) if(!string.IsEmpty())
{ {
path_phfile = string; path_phfile = string;

+ 88
- 4
src/extras.cpp View File

for(k=0; k<ix; ) for(k=0; k<ix; )
{ {
k += utf8_in(&wc,&buf[k]); k += utf8_in(&wc,&buf[k]);
wc = towlower(wc); // convert to lower case
if(iswalpha(wc))
wc = towlower2(wc); // convert to lower case
if(iswalpha2(wc))
{ {
j += utf8_out(wc,&wbuf[j]); j += utf8_out(wc,&wbuf[j]);
n_chars++; n_chars++;


#endif #endif


#define MAX_WALPHA 0x24f
void Make_walpha_tab()
{//===================
int ix;
int value;
int c;
short exceptions[40];
int ex = 0;
FILE *f;

f = fopen("/home/jsd1/walpha_tab.txt","w");
for(ix=0x80; ix<=MAX_WALPHA; ix++)
{
value = 0;
if(iswalpha(ix))
{
value = 0xfe; // no case
if(iswlower(ix))
{
value = 0xff;
}
else if(iswupper(ix))
{
c = towlower(ix);
if(c > 0)
value = c - ix;

if((value < 0) || (value > 0xfc))
{
exceptions[ex] = ix;
exceptions[ex+1] = c;
ex+=2;
value = 0xfd;
}
}

}

if(value > 0xfc)
fprintf(f," 0x%.2x,", value);
else
fprintf(f," %4d,", value);


if((ix % 16) == 15)
{
fprintf(f," // %.3x\n", ix & 0xfff0);
}

}

fprintf(f, "\nstatic const short wchar_tolower[] = {\n");

for(ix=0; ix<ex; ix+=2)
{
fprintf(f,"\t0x%.3x, 0x%.3x,\n", exceptions[ix], exceptions[ix+1]);
}
fprintf(f, "\t0,0 };\n");

fprintf(f, "\nstatic const short wchar_toupper[] = {\n");
for(ix=0x80; ix<=MAX_WALPHA; ix++)
{
if(iswlower(ix))
{
c = towupper(ix);
value = ix - c;
if((value != 32) && (value != 1))
{
fprintf(f,"\t0x%.3x, 0x%.3x,\n", ix, c);
}
}
}
fprintf(f, "\t0,0 };\n");

fclose(f);
}




const char* text1 = "Hello world. Testing."; const char* text1 = "Hello world. Testing.";
//CharsetToUnicode("ISO-8859-4"); //CharsetToUnicode("ISO-8859-4");
//CharsetToUnicode("ISCII"); //CharsetToUnicode("ISCII");



if(control==2) if(control==2)
{ {
return; return;
espeak_SetSynthCallback(TestSynthCallback); espeak_SetSynthCallback(TestSynthCallback);
espeak_SetUriCallback(TestUriCallback); espeak_SetUriCallback(TestUriCallback);


espeak_SetVoiceByName("en");
voice.languages = "fr";
espeak_SetVoiceByProperties(&voice);
// espeak_SetVoiceByName("fr");
espeak_Synth("1", 5, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, (void *)user_data);

// voice.languages = "en";
// espeak_SetVoiceByProperties(&voice);
espeak_SetVoiceByName("de");
espeak_Synth(textbuf, strlen(textbuf)+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, (void *)user_data); espeak_Synth(textbuf, strlen(textbuf)+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, (void *)user_data);
// espeak_Synth(text1, strlen(text1)+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, (void *)(user_data+1));
// espeak_Synth(text1, strlen(text1)+1, 0, POS_CHARACTER, 0, espeakSSML|espeakCHARS_UTF8, &unique_identifier, (void *)(user_data+1));


espeak_SetParameter(espeakPUNCTUATION, 1, 0); espeak_SetParameter(espeakPUNCTUATION, 1, 0);
espeak_Synchronize(); espeak_Synchronize();

+ 1
- 0
src/main.h View File

MENU_OPT_SPEED, MENU_OPT_SPEED,
MENU_OPT_PUNCT, MENU_OPT_PUNCT,
MENU_OPT_SPELL, MENU_OPT_SPELL,
MENU_OPT_SPELL2,
MENU_PATHS, MENU_PATHS,
MENU_PATH0, MENU_PATH0,
MENU_PATH1, MENU_PATH1,

+ 4
- 2
src/menus.cpp View File

option_menu = new wxMenu; option_menu = new wxMenu;
option_menu->Append(MENU_PATHS, _("Set &paths"), paths_menu); option_menu->Append(MENU_PATHS, _("Set &paths"), paths_menu);
option_menu->Append(MENU_OPT_SPEED, _("Speed...")); option_menu->Append(MENU_OPT_SPEED, _("Speed..."));
option_menu->Append(MENU_OPT_PUNCT, _("Speak punctiation"));
option_menu->Append(MENU_OPT_SPELL, _("Speak character names"));
option_menu->AppendSeparator();
option_menu->Append(MENU_OPT_PUNCT, _("Speak punctuation"));
option_menu->Append(MENU_OPT_SPELL, _("Speak characters"));
option_menu->Append(MENU_OPT_SPELL2, _("Speak character name"));


// TOOLS // TOOLS
vowelchart_menu = new wxMenu; vowelchart_menu = new wxMenu;

+ 148
- 9
src/numbers.cpp View File

} // end of LookupLetter } // end of LookupLetter




static const char *hex_letters[] = {"'e:j","b'i:","s'i:","d'i:","'i:","'Ef"}; // using phonemes available to all languages
// unicode ranges for non-ascii digits 0-9
static const int number_ranges[] = {
0x660, 0x6f0, // arabic
0x966, 0x9e6, 0xa66, 0xae6, 0xb66, 0xbe6, 0xc66, 0xce6, 0xd66, // indic
0xe50, 0xed0, 0xf20, 0x1040, 0x1090,
0 }; // these must be in ascending order


int NonAsciiNumber(int letter)
{//============================
// Change non-ascii digit into ascii digit '0' to '9', (or -1 if not)
const int *p;
int base;

for(p=number_ranges; (base = *p) != 0; p++)
{
if(letter < base)
break; // not found
if(letter < (base+10))
return(letter-base+'0');
}
return(-1);
}

#define L_SUB 0x4000 // subscript
#define L_SUP 0x8000 // superscript

static const char *modifiers[] = {NULL, "_sub", "_sup", NULL};

// this list must be in ascending order
static unsigned short derived_letters[] = {
0x00aa, 'a'+L_SUP,
0x00b2, '2'+L_SUP,
0x00b3, '3'+L_SUP,
0x00b9, '1'+L_SUP,
0x00ba, 'o'+L_SUP,
0x02b0, 'h'+L_SUP,
0x02b1, 0x266+L_SUP,
0x02b2, 'j'+L_SUP,
0x02b3, 'r'+L_SUP,
0x02b4, 0x279+L_SUP,
0x02b5, 0x27b+L_SUP,
0x02b6, 0x281+L_SUP,
0x02b7, 'w'+L_SUP,
0x02b8, 'y'+L_SUP,
0x02c0, 0x294+L_SUP,
0x02c1, 0x295+L_SUP,
0x02e0, 0x263+L_SUP,
0x02e1, 'l'+L_SUP,
0x02e2, 's'+L_SUP,
0x02e3, 'x'+L_SUP,
0x2070, '0'+L_SUP,
0x2071, 'i'+L_SUP,
0x2074, '4'+L_SUP,
0x2075, '5'+L_SUP,
0x2076, '6'+L_SUP,
0x2077, '7'+L_SUP,
0x2078, '8'+L_SUP,
0x2079, '9'+L_SUP,
0x207a, '+'+L_SUP,
0x207b, '-'+L_SUP,
0x207c, '='+L_SUP,
0x207d, '('+L_SUP,
0x207e, ')'+L_SUP,
0x207f, 'n'+L_SUP,
0x2080, '0'+L_SUB,
0x2081, '1'+L_SUB,
0x2082, '2'+L_SUB,
0x2083, '3'+L_SUB,
0x2084, '4'+L_SUB,
0x2085, '5'+L_SUB,
0x2086, '6'+L_SUB,
0x2087, '7'+L_SUB,
0x2088, '8'+L_SUB,
0x2089, '9'+L_SUB,
0x208a, '+'+L_SUB,
0x208b, '-'+L_SUB,
0x208c, '='+L_SUB,
0x208d, '('+L_SUB,
0x208e, ')'+L_SUB,
0x2090, 'a'+L_SUB,
0x2091, 'e'+L_SUB,
0x2092, 'o'+L_SUB,
0x2093, 'x'+L_SUB,
0x2094, 0x259+L_SUB,
0x2095, 'h'+L_SUB,
0x2096, 'k'+L_SUB,
0x2097, 'l'+L_SUB,
0x2098, 'm'+L_SUB,
0x2099, 'n'+L_SUB,
0x209a, 'p'+L_SUB,
0x209b, 's'+L_SUB,
0x209c, 't'+L_SUB,
0,0};


static const char *hex_letters[] = {"'e:j","b'i:","s'i:","d'i:","'i:","'ef"}; // names, using phonemes available to all languages


int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
{//========================================================================= {//=========================================================================
int letter; int letter;
int len; int len;
int ix; int ix;
int c;
char *p2; char *p2;
char *pbuf; char *pbuf;
const char *modifier;
ALPHABET *alphabet; ALPHABET *alphabet;
int al_offset; int al_offset;
int al_flags; int al_flags;
int language; int language;
int number;
int phontab_1; int phontab_1;
int speak_letter_number; int speak_letter_number;
char capital[20];
char capital[30];
char ph_buf[80]; char ph_buf[80];
char ph_buf2[80]; char ph_buf2[80];
char ph_alphabet[80]; char ph_alphabet[80];
if(control & 2) if(control & 2)
{ {
// include CAPITAL information // include CAPITAL information
if(iswupper(letter))
if(iswupper2(letter))
{ {
Lookup(tr, "_cap", capital); Lookup(tr, "_cap", capital);
} }
} }
letter = towlower2(letter); letter = towlower2(letter);

LookupLetter(tr, letter, word[n_bytes], ph_buf, control & 1); LookupLetter(tr, letter, word[n_bytes], ph_buf, control & 1);


if(ph_buf[0] == 0)
{
// is this a subscript or superscript letter ?
for(ix=0; (c = derived_letters[ix]) != 0; ix+=2)
{
if(c > letter)
break;
if(c == letter)
{
c = derived_letters[ix+1];
letter = c & 0x3fff;
if((modifier = modifiers[c >> 14]) != NULL)
{
Lookup(tr, modifier, capital);
if(capital[0] == 0)
{
capital[2] = SetTranslator2("en"); // overwrites previous contents of translator2
Lookup(translator2, modifier, &capital[3]);
if(capital[3] != 0)
{
capital[0] = phonPAUSE;
capital[1] = phonSWITCH;
len = strlen(&capital[3]);
capital[len+3] = phonSWITCH;
capital[len+4] = phontab_1;
capital[len+5] = 0;
}
}
}
}
}
LookupLetter(tr, letter, word[n_bytes], ph_buf, control & 1);
}

if(ph_buf[0] == phonSWITCH) if(ph_buf[0] == phonSWITCH)
{ {
strcpy(phonemes,ph_buf); strcpy(phonemes,ph_buf);
return(0); return(0);
} }



if((ph_buf[0] == 0) && ((number = NonAsciiNumber(letter)) > 0))
{
// convert a non-ascii number to 0-9
LookupLetter(tr, number, 0, ph_buf, control & 1);
}

al_offset = 0; al_offset = 0;
al_flags = 0; al_flags = 0;
if((alphabet = AlphabetFromChar(letter)) != NULL) if((alphabet = AlphabetFromChar(letter)) != NULL)
speak_letter_number = 1; speak_letter_number = 1;
if(!(al_flags & AL_NO_SYMBOL)) if(!(al_flags & AL_NO_SYMBOL))
{ {
if(iswalpha(letter))
if(iswalpha2(letter))
Lookup(translator, "_?A", ph_buf); Lookup(translator, "_?A", ph_buf);


if((ph_buf[0]==0) && !iswspace(letter)) if((ph_buf[0]==0) && !iswspace(letter))
speak_letter_number = 0; speak_letter_number = 0;
} }


if((ph_alphabet[0] != 0) && speak_letter_number)
ph_buf[0] = 0; // don't speak "letter" if we speak alphabet name
// if((ph_alphabet[0] != 0) && speak_letter_number)
// ph_buf[0] = 0; // don't speak "letter" if we speak alphabet name


if(speak_letter_number) if(speak_letter_number)
{ {
if((tr->langopts.numbers & NUM_NOPAUSE) && (next_char == ' ')) if((tr->langopts.numbers & NUM_NOPAUSE) && (next_char == ' '))
utf8_in(&next_char,p); utf8_in(&next_char,p);


if(!iswalpha(next_char) && (thousands_exact==0))
// if(!iswalpha(next_char) && !((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact != 0)))
if(!iswalpha2(next_char) && (thousands_exact==0))
// if(!iswalpha2(next_char) && !((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact != 0)))
strcat(ph_out,str_pause); // don't add pause for 100s, 6th, etc. strcat(ph_out,str_pause); // don't add pause for 100s, 6th, etc.
} }



+ 194
- 59
src/readclause.cpp View File



// punctuations symbols that can end a clause // punctuations symbols that can end a clause
static const unsigned short punct_chars[] = {',','.','?','!',':',';', static const unsigned short punct_chars[] = {',','.','?','!',':',';',
0x00a1, // inverted exclamation
0x00bf, // inverted question
0x2013, // en-dash 0x2013, // en-dash
0x2014, // em-dash 0x2014, // em-dash
0x2026, // elipsis 0x2026, // elipsis
// bits 0-7 pause x 10mS, bits 12-14 intonation type, bit 15 don't need following space or bracket // bits 0-7 pause x 10mS, bits 12-14 intonation type, bit 15 don't need following space or bracket
static const unsigned int punct_attributes [] = { 0, static const unsigned int punct_attributes [] = { 0,
CLAUSE_COMMA, CLAUSE_PERIOD, CLAUSE_QUESTION, CLAUSE_EXCLAMATION, CLAUSE_COLON, CLAUSE_SEMICOLON, CLAUSE_COMMA, CLAUSE_PERIOD, CLAUSE_QUESTION, CLAUSE_EXCLAMATION, CLAUSE_COLON, CLAUSE_SEMICOLON,
CLAUSE_SEMICOLON | 0x8000, // inverted exclamation
CLAUSE_SEMICOLON | 0x8000, // inverted question
CLAUSE_SEMICOLON, // en-dash CLAUSE_SEMICOLON, // en-dash
CLAUSE_SEMICOLON, // em-dash CLAUSE_SEMICOLON, // em-dash
CLAUSE_SEMICOLON | PUNCT_SAY_NAME | 0x8000, // elipsis CLAUSE_SEMICOLON | PUNCT_SAY_NAME | 0x8000, // elipsis
0, // voice type 0, // voice type
}; };


#ifdef NEED_WCHAR_FUNCTIONS


// additional Latin characters beyond the Latin1 character set
#define MAX_WALPHA 0x233
// indexed by character - 0x100
// 0=not alphabetic, 0xff=lower case, 0xfe=special case
// additional Latin characters beyond the ascii character set
#define MAX_WALPHA 0x24f
// indexed by character - 0x80
// 0=not alphabetic, 0xff=lower case, 0xfe=no case, 0xfd=use wchar_tolower
// other=value to add to upper case to convert to lower case // other=value to add to upper case to convert to lower case
static unsigned char walpha_tab[MAX_WALPHA-0xff] = {
1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, // 100
1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, // 110
1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, // 120
0xfe,0xff, 1,0xff, 1,0xff, 1,0xff,0xff, 1,0xff, 1,0xff, 1,0xff, 1, // 130
0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff,0xff, 1,0xff, 1,0xff, 1,0xff, // 140
1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, // 150
1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, // 160
1,0xff, 1,0xff, 1,0xff, 1,0xff,0xff, 1,0xff, 1,0xff, 1,0xff,0xff, // 170
0xff, 210, 1,0xff, 1,0xff, 206, 1,0xff, 205, 205, 1,0xff,0xff, 79, 202, // 180
203, 1,0xff, 205, 207,0xff, 211, 209, 1,0xff,0xff,0xff, 211, 213,0xff, 214, // 190
1,0xff, 1,0xff, 1,0xff, 218, 1,0xff, 218,0xff,0xff, 1,0xff, 218, 1, // 1a0
0xff, 217, 217, 1,0xff, 1,0xff, 219, 1,0xff,0xff,0xff, 1,0xff,0xff,0xff, // 1b0
0xff,0xff,0xff,0xff, 2, 1,0xff, 2, 1,0xff, 2, 1,0xff, 1,0xff, 1, // 1c0
0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff,0xff, 1,0xff, // 1d0
1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, // 1e0
0xff, 2, 1,0xff, 1,0xff,0xff,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, // 1f0
1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, // 200
1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, // 210
0xff, 0, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, 1,0xff, // 220
1,0xff, 1,0xff }; // 230
static unsigned char walpha_tab[MAX_WALPHA-0x7f] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 080
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 090
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xfe, 0, 0, 0, 0, 0, // 0a0
0, 0, 0, 0, 0, 0xff, 0, 0, 0, 0, 0xfe, 0, 0, 0, 0, 0, // 0b0
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // 0c0
32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0xff, // 0d0
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 0e0
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 0f0
1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, // 100
1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, // 110
1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, // 120
0xfd, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 0xfe, 1, 0xff, 1, 0xff, 1, 0xff, 1, // 130
0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 0xfe, 1, 0xff, 1, 0xff, 1, 0xff, // 140
1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, // 150
1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, // 160
1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 0xfd, 1, 0xff, 1, 0xff, 1, 0xff, 0xff, // 170
0xff, 210, 1, 0xff, 1, 0xff, 206, 1, 0xff, 205, 205, 1, 0xff, 0xfe, 79, 202, // 180
203, 1, 0xff, 205, 207, 0xff, 211, 209, 1, 0xff, 0xff, 0xfe, 211, 213, 0xff, 214, // 190
1, 0xff, 1, 0xff, 1, 0xff, 218, 1, 0xff, 218, 0xfe, 0xfe, 1, 0xff, 218, 1, // 1a0
0xff, 217, 217, 1, 0xff, 1, 0xff, 219, 1, 0xff, 0xfe, 0xfe, 1, 0xff, 0xfe, 0xff, // 1b0
0xfe, 0xfe, 0xfe, 0xfe, 2, 0xff, 0xff, 2, 0xff, 0xff, 2, 0xff, 0xff, 1, 0xff, 1, // 1c0
0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 0xff, 1, 0xff, // 1d0
1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, // 1e0
0xfe, 2, 0xff, 0xff, 1, 0xff, 0xfd, 0xfd, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, // 1f0
1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, // 200
1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, // 210
0xfd, 0xfe, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, // 220
1, 0xff, 1, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 1, 0xff, 0xfd, 0xfd, 0xfe, // 230
0xfe, 1, 0xff, 0xfd, 69, 71, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff, 1, 0xff}; // 240

static const short wchar_tolower[] = {
0x130, 0x069,
0x178, 0x0ff,
0x1f6, 0x195,
0x1f7, 0x1bf,
0x220, 0x19e,
0x23a, 0x2c65,
0x23d, 0x19a,
0x23e, 0x2c66,
0x243, 0x180,
0,0 };

static const short wchar_toupper[] = {
0x0b5, 0x39c,
0x0df, 0x0df,
0x0ff, 0x178,
0x131, 0x049,
0x17f, 0x053,
0x180, 0x243,
0x195, 0x1f6,
0x19a, 0x23d,
0x19e, 0x220,
0x1bf, 0x1f7,
0x1c6, 0x1c4,
0x1c9, 0x1c7,
0x1cc, 0x1ca,
0x1dd, 0x18e,
0x1f3, 0x1f1,
0,0 };


#ifdef NEED_WCHAR_FUNCTIONS


// use ctype.h functions for Latin1 (character < 0x100) // use ctype.h functions for Latin1 (character < 0x100)
int iswalpha(int c) int iswalpha(int c)
{ {
if(c < 0x100)
if(c < 0x80)
return(isalpha(c)); return(isalpha(c));
if((c > 0x3040) && (c <= 0xa700)) if((c > 0x3040) && (c <= 0xa700))
return(1); // japanese, chinese characters return(1); // japanese, chinese characters
if(c > MAX_WALPHA) if(c > MAX_WALPHA)
return(0); return(0);
return(walpha_tab[c-0x100]);
return(walpha_tab[c-0x80]);
} }


int iswdigit(int c) int iswdigit(int c)
{ {
if(c < 0x100)
if(c < 0x80)
return(isdigit(c)); return(isdigit(c));
return(0); return(0);
} }
int towlower(int c) int towlower(int c)
{ {
int x; int x;
if(c < 0x100)
int ix;

if(c < 0x80)
return(tolower(c)); return(tolower(c));
if((c > MAX_WALPHA) || ((x = walpha_tab[c-0x100])==0xff))
return(c); // already lower case
if(x == 0xfe)

if((c > MAX_WALPHA) || ((x = walpha_tab[c-0x80]) >= 0xfe))
return(c);

if(x == 0xfd)
{ {
// special cases
if(c == 0x130) // uppercase i-dot
return('i');
// special cases, lookup translation table
for(ix=0; wchar_tolower[ix] != 0; ix+=2)
{
if(wchar_tolower[ix] == c)
return(wchar_tolower[ix+1]);
}
} }
return(c + x); // convert to lower case return(c + x); // convert to lower case
} }


int towupper(int c) int towupper(int c)
{ {
// check whether the previous character code is the upper-case equivalent of this character
if(tolower(c-1) == c)
return(c-1); // yes, use it
int ix;
// check whether a previous character code is the upper-case equivalent of this character
if(towlower(c-32) == c)
return(c-32); // yes, use it
if(towlower(c-1) == c)
return(c-1);
for(ix=0; wchar_toupper[ix] != 0; ix+=2)
{
if(wchar_toupper[ix] == c)
return(wchar_toupper[ix+1]);
}
return(c); // no return(c); // no
} }


int iswupper(int c) int iswupper(int c)
{ {
int x; int x;
if(c < 0x100)
if(c < 0x80)
return(isupper(c)); return(isupper(c));
if(((c > MAX_WALPHA) || (x = walpha_tab[c-0x100])==0) || (x == 0xff))
if(((c > MAX_WALPHA) || (x = walpha_tab[c-0x80])==0) || (x == 0xff))
return(0); return(0);
return(1); return(1);
} }


int iswlower(int c) int iswlower(int c)
{ {
if(c < 0x100)
if(c < 0x80)
return(islower(c)); return(islower(c));
if((c > MAX_WALPHA) || (walpha_tab[c-0x100] != 0xff))
if((c > MAX_WALPHA) || (walpha_tab[c-0x80] != 0xff))
return(0); return(0);
return(1); return(1);
} }


int iswspace(int c) int iswspace(int c)
{ {
if(c < 0x100)
if(c < 0x80)
return(isspace(c)); return(isspace(c));
if(c == 0xa0)
return(1);
return(0); return(0);
} }


} }
#endif #endif



// use internal data for iswalpha up to U+024F
// iswalpha() on Windows is unreliable (U+AA, U+BA).
int iswalpha2(int c)
{
if(c < 0x80)
return(isalpha(c));
if((c > 0x3040) && (c <= 0xa700))
return(1); // japanese, chinese characters
if(c > MAX_WALPHA)
return(iswalpha(c));
return(walpha_tab[c-0x80]);
}

int iswlower2(int c)
{
if(c < 0x80)
return(islower(c));
if(c > MAX_WALPHA)
return(iswlower(c));
if(walpha_tab[c-0x80] == 0xff)
return(1);
return(0);
}

int iswupper2(int c)
{
int x;
if(c < 0x80)
return(isupper(c));
if(c > MAX_WALPHA)
return(iswupper(c));
if(((x = walpha_tab[c-0x80]) > 0) && (x < 0xfe))
return(1);
return(0);
}

int towlower2(unsigned int c) int towlower2(unsigned int c)
{ {
int x;
int ix;

// check for non-standard upper to lower case conversions // check for non-standard upper to lower case conversions
if(c == 'I') if(c == 'I')
{ {
if(translator->translator_name == L('t','r'))
if(translator->langopts.dotless_i)
{ {
c = 0x131; // I -> ı c = 0x131; // I -> ı
} }
} }
#ifdef __WIN32__
if(c == 0x130) // uppercase i-dot
return('i');
#endif
return(towlower(c));

if(c < 0x80)
return(tolower(c));

if(c > MAX_WALPHA)
return(towlower(c));

if((x = walpha_tab[c-0x80]) >= 0xfe)
return(c); // this is not an upper case letter

if(x == 0xfd)
{
// special cases, lookup translation table
for(ix=0; wchar_tolower[ix] != 0; ix+=2)
{
if(wchar_tolower[ix] == (int)c)
return(wchar_tolower[ix+1]);
}
}
return(c + x); // convert to lower case
} }


int towupper2(unsigned int c)
{
int ix;
if(c > MAX_WALPHA)
return(towupper(c));

// check whether a previous character code is the upper-case equivalent of this character
if(towlower2(c-32) == (int)c)
return(c-32); // yes, use it
if(towlower2(c-1) == (int)c)
return(c-1);
for(ix=0; wchar_toupper[ix] != 0; ix+=2)
{
if(wchar_toupper[ix] == (int)c)
return(wchar_toupper[ix+1]);
}
return(c); // no
}


static int IsRomanU(unsigned int c) static int IsRomanU(unsigned int c)
{//================================ {//================================
c2 = ' '; c2 = ' ';
} }
else else
if((c2 == '/') || iswalpha(c2))
if((c2 == '/') || iswalpha2(c2))
{ {
// check for space in the output buffer for embedded commands produced by the SSML tag // check for space in the output buffer for embedded commands produced by the SSML tag
if(ix > (n_buf - 20)) if(ix > (n_buf - 20))
} }
} }


if(iswupper(c1))
if(iswupper2(c1))
{ {
tr->clause_upper_count++; tr->clause_upper_count++;
if((option_capitals == 2) && (sayas_mode == 0) && !iswupper(cprev))
if((option_capitals == 2) && (sayas_mode == 0) && !iswupper2(cprev))
{ {
char text_buf[40]; char text_buf[40];
char text_buf2[30]; char text_buf2[30];
} }
} }
else else
if(iswalpha(c1))
if(iswalpha2(c1))
tr->clause_lower_count++; tr->clause_lower_count++;


if(option_phoneme_input) if(option_phoneme_input)


if(!iswspace(c1)) if(!iswspace(c1))
{ {
if(!IsAlpha(c1) || !iswlower(c1))
// if(iswdigit(c1) || (IsAlpha(c1) && !iswlower(c1)))
if(!IsAlpha(c1) || !iswlower2(c1))
// if(iswdigit(c1) || (IsAlpha(c1) && !iswlower2(c1)))
{ {
UngetC(c2); UngetC(c2);
ungot_char2 = c1; ungot_char2 = c1;


if(nl_count==0) if(nl_count==0)
{ {
if((c1 == ',') && (cprev == '.') && (tr->translator_name == L('h','u')) && iswdigit(cprev2) && (iswdigit(c_next) || (iswlower(c_next))))
if((c1 == ',') && (cprev == '.') && (tr->translator_name == L('h','u')) && iswdigit(cprev2) && (iswdigit(c_next) || (iswlower2(c_next))))
{ {
// lang=hu, fix for ordinal numbers, eg: "december 2., szerda", ignore ',' after ordinal number // lang=hu, fix for ordinal numbers, eg: "december 2., szerda", ignore ',' after ordinal number
c1 = CHAR_COMMA_BREAK; c1 = CHAR_COMMA_BREAK;
} }
else else
{ {
if (iswlower(c_next) || (c_next=='-')) // hyphen is needed for lang-hu (eg. 2.-kal)
if (iswlower2(c_next) || (c_next=='-')) // hyphen is needed for lang-hu (eg. 2.-kal)
is_end_clause = 0; // only if followed by lower-case, (or if there is a XML tag) is_end_clause = 0; // only if followed by lower-case, (or if there is a XML tag)
} }
} }
{ {
is_end_clause = 0; // eg. u.s.a.'s is_end_clause = 0; // eg. u.s.a.'s
} }
if(iswlower(c_next))
if(iswlower2(c_next))
{ {
// next word has no capital letter, this dot is probably from an abbreviation // next word has no capital letter, this dot is probably from an abbreviation
// c1 = ' '; // c1 = ' ';

+ 14
- 7
src/speak.cpp View File

#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <ctype.h>


#ifndef PLATFORM_DOS #ifndef PLATFORM_DOS
#ifdef PLATFORM_WINDOWS #ifdef PLATFORM_WINDOWS
"\t Compile pronunciation rules and dictionary from the current\n" "\t Compile pronunciation rules and dictionary from the current\n"
"\t directory. <voice name> specifies the language\n" "\t directory. <voice name> specifies the language\n"
"--ipa Write phonemes to stdout using International Phonetic Alphabet\n" "--ipa Write phonemes to stdout using International Phonetic Alphabet\n"
"\t --ipa=1 Use ties, --ipa=2 Use ZWJ\n"
"\t --ipa=1 Use ties, --ipa=2 Use ZWJ, --ipa=3 Separate with _\n"
"--path=\"<path>\"\n" "--path=\"<path>\"\n"
"\t Specifies the directory containing the espeak-data directory\n" "\t Specifies the directory containing the espeak-data directory\n"
"--pho Write mbrola phoneme data (.pho) to stdout or to the file in --phonout\n" "--pho Write mbrola phoneme data (.pho) to stdout or to the file in --phonout\n"
if(path == NULL) if(path == NULL)
return(2); return(2);


if(strcmp(path,"stdout")==0)
while(isspace(*path)) path++;

f_wave = NULL;
if(path[0] != 0)
{ {
if(strcmp(path,"stdout")==0)
{
#ifdef PLATFORM_WINDOWS #ifdef PLATFORM_WINDOWS
// prevent Windows adding 0x0d before 0x0a bytes // prevent Windows adding 0x0d before 0x0a bytes
_setmode(_fileno(stdout), _O_BINARY);
_setmode(_fileno(stdout), _O_BINARY);
#endif #endif
f_wave = stdout;
f_wave = stdout;
}
else
f_wave = fopen(path,"wb");
} }
else
f_wave = fopen(path,"wb");


if(f_wave != NULL) if(f_wave != NULL)
{ {
{ {
value = -1; value = -1;
sscanf(optarg2,"%d",&value); sscanf(optarg2,"%d",&value);
if((value<0) || (value>2))
if((value<0) || (value>3))
{ {
fprintf(stderr,"Bad value for -ipa=\n"); fprintf(stderr,"Bad value for -ipa=\n");
value = 0; value = 0;

+ 11
- 0
src/speak_lib.cpp View File

} // end of espeak_SetPhonemes } // end of espeak_SetPhonemes




ESPEAK_API void espeak_TextToPhonemes(const void *text, char *buffer, int size, int textmode, int phonememode)
{//==============================================================================================================
/* phoneme_mode bits 0-3: 0=only phoneme names, 1=ties, 2=ZWJ, 3=underscore separator
bits 4-7: 0=eSpeak phoneme names, 1=IPA
*/
option_multibyte = textmode & 7;
TranslateClause(translator, NULL, text, NULL, NULL);
GetTranslatedPhonemeString(buffer, size, phonememode);
}


ESPEAK_API void espeak_CompileDictionary(const char *path, FILE *log, int flags) ESPEAK_API void espeak_CompileDictionary(const char *path, FILE *log, int flags)
{//============================================================================= {//=============================================================================
ENTER("espeak_CompileDictionary"); ENTER("espeak_CompileDictionary");

+ 62
- 29
src/speak_lib.h View File

Changed espeak_EVENT structure to add id.string[] for phoneme mnemonics. Changed espeak_EVENT structure to add id.string[] for phoneme mnemonics.
Added espeakINITIALIZE_PHONEME_IPA option for espeak_Initialize() to report phonemes as IPA names. Added espeakINITIALIZE_PHONEME_IPA option for espeak_Initialize() to report phonemes as IPA names.


Revision 8 26.Apr.2013
Added function espeak_TextToPhonemes().

*/ */
/********************/ /********************/
/* Initialization */ /* Initialization */
char string[8]; // used for phoneme names (UTF8). Terminated by a zero byte unless the name needs the full 8 bytes. char string[8]; // used for phoneme names (UTF8). Terminated by a zero byte unless the name needs the full 8 bytes.
} id; } id;
} espeak_EVENT; } espeak_EVENT;
/*
/*
When a message is supplied to espeak_synth, the request is buffered and espeak_synth returns. When the message is really processed, the callback function will be repetedly called. When a message is supplied to espeak_synth, the request is buffered and espeak_synth returns. When the message is really processed, the callback function will be repetedly called.






In PLAYBACK mode, the callback function is called as soon as an event happens. In PLAYBACK mode, the callback function is called as soon as an event happens.


For example suppose that the following message is supplied to espeak_Synth:
For example suppose that the following message is supplied to espeak_Synth:
"hello, hello." "hello, hello."




* Once processed in RETRIEVAL mode, it could lead to 3 calls of the callback function : * Once processed in RETRIEVAL mode, it could lead to 3 calls of the callback function :


** Block 1: ** Block 1:
<audio data> +
<audio data> +
List of events: SENTENCE + WORD + LIST_TERMINATED List of events: SENTENCE + WORD + LIST_TERMINATED
** Block 2: ** Block 2:
<audio data> + <audio data> +
List of events: WORD + END + LIST_TERMINATED List of events: WORD + END + LIST_TERMINATED


typedef enum { typedef enum {
/* PLAYBACK mode: plays the audio data, supplies events to the calling program*/ /* PLAYBACK mode: plays the audio data, supplies events to the calling program*/
AUDIO_OUTPUT_PLAYBACK,
AUDIO_OUTPUT_PLAYBACK,


/* RETRIEVAL mode: supplies audio data and events to the calling program */ /* RETRIEVAL mode: supplies audio data and events to the calling program */
AUDIO_OUTPUT_RETRIEVAL, AUDIO_OUTPUT_RETRIEVAL,
/* SYNCHRONOUS mode: as RETRIEVAL but doesn't return until synthesis is completed */ /* SYNCHRONOUS mode: as RETRIEVAL but doesn't return until synthesis is completed */
AUDIO_OUTPUT_SYNCHRONOUS, AUDIO_OUTPUT_SYNCHRONOUS,


ESPEAK_API void espeak_SetSynthCallback(t_espeak_callback* SynthCallback); ESPEAK_API void espeak_SetSynthCallback(t_espeak_callback* SynthCallback);
/* Must be called before any synthesis functions are called. /* Must be called before any synthesis functions are called.
This specifies a function in the calling program which is called when a buffer of This specifies a function in the calling program which is called when a buffer of
speech sound data has been produced.
speech sound data has been produced.




The callback function is of the form: The callback function is of the form:
start of the text. start of the text.


position_type: Determines whether "position" is a number of characters, words, or sentences. position_type: Determines whether "position" is a number of characters, words, or sentences.
Values:
Values:


end_position: If set, this gives a character position at which speaking will stop. A value end_position: If set, this gives a character position at which speaking will stop. A value
of zero indicates no end position. of zero indicates no end position.
espeakCHARS_8BIT The 8 bit ISO-8859 character set for the particular language. espeakCHARS_8BIT The 8 bit ISO-8859 character set for the particular language.
espeakCHARS_AUTO 8 bit or UTF8 (this is the default) espeakCHARS_AUTO 8 bit or UTF8 (this is the default)
espeakCHARS_WCHAR Wide characters (wchar_t) espeakCHARS_WCHAR Wide characters (wchar_t)
espeakCHARS_16BIT 16 bit characters.


espeakSSML Elements within < > are treated as SSML elements, or if not recognised are ignored. espeakSSML Elements within < > are treated as SSML elements, or if not recognised are ignored.


espeakENDPAUSE If set then a sentence pause is added at the end of the text. If not set then espeakENDPAUSE If set then a sentence pause is added at the end of the text. If not set then
this pause is suppressed. this pause is suppressed.


unique_identifier: message identifier; helpful for identifying later
unique_identifier: message identifier; helpful for identifying later
data supplied to the callback. data supplied to the callback.


user_data: pointer which will be passed to the callback function. user_data: pointer which will be passed to the callback function.


Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again. you may try after a while to call the function again.
EE_INTERNAL_ERROR. EE_INTERNAL_ERROR.
*/ */


For the other parameters, see espeak_Synth() For the other parameters, see espeak_Synth()


Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again. you may try after a while to call the function again.
EE_INTERNAL_ERROR. EE_INTERNAL_ERROR.
*/ */
If key_name is a single character, it speaks the name of the character. If key_name is a single character, it speaks the name of the character.
Otherwise, it speaks key_name as a text string. Otherwise, it speaks key_name as a text string.


Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again. you may try after a while to call the function again.
EE_INTERNAL_ERROR. EE_INTERNAL_ERROR.
*/ */
extern "C" extern "C"
#endif #endif
ESPEAK_API espeak_ERROR espeak_Char(wchar_t character); ESPEAK_API espeak_ERROR espeak_Char(wchar_t character);
/* Speak the name of the given character
/* Speak the name of the given character


Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again. you may try after a while to call the function again.
EE_INTERNAL_ERROR. EE_INTERNAL_ERROR.
*/ */
espeakRANGE: pitch range, range 0-100. 0-monotone, 50=normal espeakRANGE: pitch range, range 0-100. 0-monotone, 50=normal


espeakPUNCTUATION: which punctuation characters to announce: espeakPUNCTUATION: which punctuation characters to announce:
value in espeak_PUNCT_TYPE (none, all, some),
value in espeak_PUNCT_TYPE (none, all, some),
see espeak_GetParameter() to specify which characters are announced. see espeak_GetParameter() to specify which characters are announced.


espeakCAPITALS: announce capital letters by: espeakCAPITALS: announce capital letters by:


espeakWORDGAP: pause between words, units of 10mS (at the default speed) espeakWORDGAP: pause between words, units of 10mS (at the default speed)


Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again. you may try after a while to call the function again.
EE_INTERNAL_ERROR. EE_INTERNAL_ERROR.
*/ */


punctlist: A list of character codes, terminated by a zero character. punctlist: A list of character codes, terminated by a zero character.


Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again. you may try after a while to call the function again.
EE_INTERNAL_ERROR. EE_INTERNAL_ERROR.
*/ */
stream output stream for the phoneme symbols (and trace). If stream=NULL then it uses stdout. stream output stream for the phoneme symbols (and trace). If stream=NULL then it uses stdout.
*/ */


#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API void espeak_TextToPhonemes(const void *text, char *buffer, int size, int textmode, int phonememode);
/* Translates text into phonemes. Call espeak_SetVoiceByName() first, to select a language.
text: The text to translate, terminated by a zero character.

buffer: Output buffer for the phoneme translation.

size: Size of the output buffer in bytes.

textmode: Type of character codes, one of:
espeakCHARS_UTF8 UTF8 encoding
espeakCHARS_8BIT The 8 bit ISO-8859 character set for the particular language.
espeakCHARS_AUTO 8 bit or UTF8 (this is the default)
espeakCHARS_WCHAR Wide characters (wchar_t)
espeakCHARS_16BIT 16 bit characters.

phonememode: bits0-3:
0= just phonemes.
1= include ties (U+361) for phoneme names of more than one letter.
2= include zero-width-joiner for phoneme names of more than one letter.
3= separate phonemes with underscore characters.

bits 4-7:
0= eSpeak's ascii phoneme names.
1= International Phonetic Alphabet (as UTF-8 characters).
*/

#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
#endif #endif
unsigned char gender; // 0=none 1=male, 2=female, unsigned char gender; // 0=none 1=male, 2=female,
unsigned char age; // 0=not specified, or age in years unsigned char age; // 0=not specified, or age in years
unsigned char variant; // only used when passed as a parameter to espeak_SetVoiceByProperties unsigned char variant; // only used when passed as a parameter to espeak_SetVoiceByProperties
unsigned char xx1; // for internal use
unsigned char xx1; // for internal use
int score; // for internal use int score; // for internal use
void *spare; // for internal use void *spare; // for internal use
} espeak_VOICE; } espeak_VOICE;
/* Searches for a voice with a matching "name" field. Language is not considered. /* Searches for a voice with a matching "name" field. Language is not considered.
"name" is a UTF8 string. "name" is a UTF8 string.


Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again. you may try after a while to call the function again.
EE_INTERNAL_ERROR. EE_INTERNAL_ERROR.
*/ */
function returns, the audio output is fully stopped and the synthesizer is ready to function returns, the audio output is fully stopped and the synthesizer is ready to
synthesize a new message. synthesize a new message.


Return: EE_OK: operation achieved
Return: EE_OK: operation achieved
EE_INTERNAL_ERROR. EE_INTERNAL_ERROR.
*/ */


#endif #endif
ESPEAK_API espeak_ERROR espeak_Synchronize(void); ESPEAK_API espeak_ERROR espeak_Synchronize(void);
/* This function returns when all data have been spoken. /* This function returns when all data have been spoken.
Return: EE_OK: operation achieved
Return: EE_OK: operation achieved
EE_INTERNAL_ERROR. EE_INTERNAL_ERROR.
*/ */


#endif #endif
ESPEAK_API espeak_ERROR espeak_Terminate(void); ESPEAK_API espeak_ERROR espeak_Terminate(void);
/* last function to be called. /* last function to be called.
Return: EE_OK: operation achieved
Return: EE_OK: operation achieved
EE_INTERNAL_ERROR. EE_INTERNAL_ERROR.
*/ */



+ 1
- 1
src/synthdata.cpp View File

#include "translate.h" #include "translate.h"
#include "wave.h" #include "wave.h"


const char *version_string = "1.47.04 02.Apr.13";
const char *version_string = "1.47.08 26.Apr.13";
const int version_phdata = 0x014701; const int version_phdata = 0x014701;


int option_device_number = -1; int option_device_number = -1;

+ 3
- 9
src/synthesize.cpp View File



if((option_phonemes > 0) || (phoneme_callback != NULL)) if((option_phonemes > 0) || (phoneme_callback != NULL))
{ {
int use_ipa = 0;
int phoneme_mode = 0;
if(option_phonemes >= 3) if(option_phonemes >= 3)
use_ipa = option_phonemes-2; // 1=ipa, 2=ipa with tie, 3=ipa with ZWJ
phoneme_mode = 0x10 + option_phonemes-3; // 0x10=ipa, 0x11=ipa with tie, 0x12=ipa with ZWJ, 0x13=ipa with separators


GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), use_ipa);
GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), phoneme_mode);
if(option_phonemes > 0) if(option_phonemes > 0)
{ {
fprintf(f_trans,"%s\n",translator->phon_out); fprintf(f_trans,"%s\n",translator->phon_out);

if(!iswalpha(0x010d))
{
// check that c-caron is recognized as an alphabetic character
fprintf(stderr,"Warning: Accented letters are not recognized, eg: U+010D\nSet LC_CTYPE to a UTF-8 locale\n");
}
} }
if(phoneme_callback != NULL) if(phoneme_callback != NULL)
{ {

+ 5
- 5
src/synthesize.h View File



// a clause translated into phoneme codes (first stage) // a clause translated into phoneme codes (first stage)
typedef struct { typedef struct {
unsigned short synthflags; // NOTE Put shorts on 32bit boundaries, because of RISC OS compiler bug?
unsigned char phcode; unsigned char phcode;
unsigned char stresslevel; unsigned char stresslevel;
unsigned char wordstress;
unsigned char tone_ph; // tone phoneme to use with this vowel
unsigned short synthflags;
unsigned short sourceix; // ix into the original source text string, only set at the start of a word unsigned short sourceix; // ix into the original source text string, only set at the start of a word
unsigned char wordstress; // the highest level stress in this word
unsigned char tone_ph; // tone phoneme to use with this vowel
} PHONEME_LIST2; } PHONEME_LIST2;




typedef struct { typedef struct {
// The first section is a copy of PHONEME_LIST2 // The first section is a copy of PHONEME_LIST2
unsigned short synthflags;
unsigned char phcode; unsigned char phcode;
unsigned char stresslevel; unsigned char stresslevel;
unsigned short sourceix; // ix into the original source text string, only set at the start of a word
unsigned char wordstress; // the highest level stress in this word unsigned char wordstress; // the highest level stress in this word
unsigned char tone_ph; // tone phoneme to use with this vowel unsigned char tone_ph; // tone phoneme to use with this vowel
unsigned short synthflags;
unsigned short sourceix; // ix into the original source text string, only set at the start of a word


PHONEME_TAB *ph; PHONEME_TAB *ph;
short length; // length_mod short length; // length_mod

+ 4
- 1
src/tr_languages.cpp View File

tr->langopts.stress_rule = STRESSPOSN_1L; tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.numbers = 1; tr->langopts.numbers = 1;
tr->langopts.accents = 2; // 'capital' after letter name tr->langopts.accents = 2; // 'capital' after letter name
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 3; // don't count apostrophe
} }
break; break;


SetLetterBits(tr,LETTERGP_VOWEL2,hy_vowels); SetLetterBits(tr,LETTERGP_VOWEL2,hy_vowels);
SetLetterBits(tr,LETTERGP_C,hy_consonants); SetLetterBits(tr,LETTERGP_C,hy_consonants);
tr->langopts.max_initial_consonants = 6; tr->langopts.max_initial_consonants = 6;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_OMIT_1_HUNDRED;
// tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words // tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
} }
break; break;
ResetLetterBits(tr,0x2); ResetLetterBits(tr,0x2);
SetLetterBits(tr,1,"bcdfgjkmnpqstvxz"); // B hard consonants, excluding h,l,r,w,y SetLetterBits(tr,1,"bcdfgjkmnpqstvxz"); // B hard consonants, excluding h,l,r,w,y
tr->langopts.param[LOPT_ALT] = 2; // call ApplySpecialAttributes2() if a word has $alt or $alt2 tr->langopts.param[LOPT_ALT] = 2; // call ApplySpecialAttributes2() if a word has $alt or $alt2
tr->langopts.accents = 2; // 'capital' after letter name
} }
break; break;




tr->langopts.stress_rule = 7; // stress on the last syllable, before any explicitly unstressed syllable tr->langopts.stress_rule = 7; // stress on the last syllable, before any explicitly unstressed syllable
tr->langopts.stress_flags = S_NO_AUTO_2; //no automatic secondary stress tr->langopts.stress_flags = S_NO_AUTO_2; //no automatic secondary stress
tr->langopts.dotless_i = 1;
tr->langopts.param[LOPT_SUFFIX] = 1; tr->langopts.param[LOPT_SUFFIX] = 1;


if(name2 == L('a','z')) if(name2 == L('a','z'))

+ 20
- 17
src/translate.cpp View File

0 0
}; };


if(iswalpha(c))
if(iswalpha2(c))
return(1); return(1);


if(c < 0x300)
return(0);

if((c >= 0x901) && (c <= 0xdf7)) if((c >= 0x901) && (c <= 0xdf7))
{ {
// Indic scripts: Devanagari, Tamil, etc // Indic scripts: Devanagari, Tamil, etc
while((*word != 0) && !isspace2(*word)) while((*word != 0) && !isspace2(*word))
{ {
word += utf8_in(&c, word); word += utf8_in(&c, word);
if(!iswupper(c))
if(!iswupper2(c))
return(0); return(0);
} }
return(1); return(1);
} }
} }


if((wflags & FLAG_ALL_UPPER) && (word_length > 1)&& iswalpha(first_char))
if((wflags & FLAG_ALL_UPPER) && (word_length > 1)&& iswalpha2(first_char))
{ {
if((option_tone_flags & OPTION_EMPHASIZE_ALLCAPS) && !(dictionary_flags[0] & FLAG_ABBREV)) if((option_tone_flags & OPTION_EMPHASIZE_ALLCAPS) && !(dictionary_flags[0] & FLAG_ABBREV))
{ {
tr->expect_past--; tr->expect_past--;
} }


if((word_length == 1) && (tr->translator_name == L('e','n')) && iswalpha(first_char) && (first_char != 'i'))
if((word_length == 1) && (tr->translator_name == L('e','n')) && iswalpha2(first_char) && (first_char != 'i'))
{ {
// English Specific !!!! // English Specific !!!!
// any single letter before a dot is an abbreviation, except 'I' // any single letter before a dot is an abbreviation, except 'I'
while(*p2 != ' ') p2++; while(*p2 != ' ') p2++;


utf8_in(&c_word2, p2+1); // first character of the next word; utf8_in(&c_word2, p2+1); // first character of the next word;
if(!iswalpha(c_word2))
if(!iswalpha2(c_word2))
{ {
ok =0; ok =0;
} }


// there is a list of character codes to be substituted with alternative codes // there is a list of character codes to be substituted with alternative codes


if(iswupper(c_lower = c))
if(iswupper2(c_lower = c))
{ {
c_lower = towlower(c);
c_lower = towlower2(c);
upper_case = 1; upper_case = 1;
} }


new_c = replace_chars[ix+1]; new_c = replace_chars[ix+1];
break; break;
} }
if((word >> 16) == (unsigned int)towlower(next_in))
if((word >> 16) == (unsigned int)towlower2(next_in))
{ {
new_c = replace_chars[ix+1]; new_c = replace_chars[ix+1];
ignore_next = 1; ignore_next = 1;
// there is a second character to be inserted // there is a second character to be inserted
// don't convert the case of the second character unless the next letter is also upper case // don't convert the case of the second character unless the next letter is also upper case
c2 = new_c >> 16; c2 = new_c >> 16;
if(upper_case && iswupper(next_in))
c2 = towupper(c2);
if(upper_case && iswupper2(next_in))
c2 = towupper2(c2);
*insert = c2; *insert = c2;
new_c &= 0xffff; new_c &= 0xffff;
} }


if(upper_case) if(upper_case)
new_c = towupper(new_c);
new_c = towupper2(new_c);


*wordflags |= FLAG_CHAR_REPLACED; *wordflags |= FLAG_CHAR_REPLACED;
return(new_c); return(new_c);
// look for 'n and replace by a special character (unicode: schwa) // look for 'n and replace by a special character (unicode: schwa)




if(!iswalpha(prev_in))
if(!iswalpha2(prev_in))
{ {
utf8_in(&next2, &ptr[1]); utf8_in(&next2, &ptr[1]);


} }
else else
{ {
if(iswupper(c))
if(iswupper2(c))
word_flags |= FLAG_FIRST_UPPER; word_flags |= FLAG_FIRST_UPPER;


if((prev_out == ' ') && iswdigit(sbuf[ix-2]) && !iswdigit(prev_in)) if((prev_out == ' ') && iswdigit(sbuf[ix-2]) && !iswdigit(prev_in))
} }
} }


if(iswupper(c))
if(iswupper2(c))
{ {
c = towlower2(c); c = towlower2(c);


} }
else else
{ {
if((iswlower(prev_in)) && (prev_in != 0xba)) // Windows thinks masc.ordinal (0xba) is lower-case
if(iswlower2(prev_in))
{ {
// lower case followed by upper case in a word // lower case followed by upper case in a word
if(UpperCaseInWord(tr, &sbuf[ix], c) == 1) if(UpperCaseInWord(tr, &sbuf[ix], c) == 1)
{ {
// convert to lower case and continue // convert to lower case and continue
c = towlower(c);
c = towlower2(c);
} }
else else
{ {
// next_word_flags |= FLAG_NOSPACE; // problem: prevents FLAG_HAS_DOT being set // next_word_flags |= FLAG_NOSPACE; // problem: prevents FLAG_HAS_DOT being set
} }
} }
else if((c != ' ') && iswupper(prev_in) && iswlower(next_in))
else if((c != ' ') && iswupper2(prev_in) && iswlower2(next_in))
{ {
int next2_in; int next2_in;
utf8_in(&next2_in,&source[source_index + next_in_nbytes]); utf8_in(&next2_in,&source[source_index + next_in_nbytes]);

+ 9
- 3
src/translate.h View File

#define FLAG_ONLY 0x4000 #define FLAG_ONLY 0x4000
#define FLAG_ONLY_S 0x8000 #define FLAG_ONLY_S 0x8000
#define FLAG_STEM 0x10000 // must have a suffix #define FLAG_STEM 0x10000 // must have a suffix
#define FLAG_ATEND 0x20000 /* use this pronunciation if at end of clause */
#define FLAG_ATEND 0x20000 // use this pronunciation if at end of clause
#define FLAG_ATSTART 0x40000 // use this pronunciation if at start of clause #define FLAG_ATSTART 0x40000 // use this pronunciation if at start of clause
#define FLAG_NATIVE 0x80000 // not if we've switched translators
#define FLAG_LOOKUP_SYMBOL 0x40000000 // to indicate called from Lookup() #define FLAG_LOOKUP_SYMBOL 0x40000000 // to indicate called from Lookup()


#define BITNUM_FLAG_ALLCAPS 0x2a #define BITNUM_FLAG_ALLCAPS 0x2a
typedef struct{ typedef struct{
unsigned int flags; unsigned int flags;
unsigned short start; unsigned short start;
unsigned short sourceix;
unsigned char pre_pause; unsigned char pre_pause;
unsigned char wmark; unsigned char wmark;
unsigned short sourceix;
unsigned char length; unsigned char length;
} WORD_TAB; } WORD_TAB;


char tone_numbers; char tone_numbers;
char ideographs; // treat as separate words char ideographs; // treat as separate words
char textmode; // the meaning of FLAG_TEXTMODE is reversed (to save data when *_list file is compiled) char textmode; // the meaning of FLAG_TEXTMODE is reversed (to save data when *_list file is compiled)
char dotless_i; // uses letter U+0131
int testing; // testing options: bit 1= specify stressed syllable in the form: "outdoor/2" int testing; // testing options: bit 1= specify stressed syllable in the form: "outdoor/2"
int listx; // compile *_listx after *list int listx; // compile *_listx after *list
const unsigned int *replace_chars; // characters to be substitutes const unsigned int *replace_chars; // characters to be substitutes
int IsDigit09(unsigned int c); int IsDigit09(unsigned int c);
int IsAlpha(unsigned int c); int IsAlpha(unsigned int c);
int IsVowel(Translator *tr, int c); int IsVowel(Translator *tr, int c);
int iswalpha2(int c);
int isspace2(unsigned int c); int isspace2(unsigned int c);
int iswlower2(int c);
int iswupper2(int c);
int towlower2(unsigned int c); int towlower2(unsigned int c);
void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa);
int towupper2(unsigned int c);
void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int phoneme_mode);
const char *WordToString2(unsigned int word); const char *WordToString2(unsigned int word);
ALPHABET *AlphabetFromChar(int c); ALPHABET *AlphabetFromChar(int c);
ALPHABET *AlphabetFromName(const char *name); ALPHABET *AlphabetFromName(const char *name);

+ 1
- 1
src/transldlg.cpp View File

t_phonetic->SetDefaultStyle(style_phonetic_large); t_phonetic->SetDefaultStyle(style_phonetic_large);


translate_text = 3; translate_text = 3;
use_ipa = 1;
use_ipa = 0x10;
break; break;


case T_PROCESS: case T_PROCESS:

+ 1
- 0
src/voice.h View File



typedef struct { typedef struct {
char v_name[40]; char v_name[40];
char language_name[20];


int phoneme_tab_ix; // phoneme table number int phoneme_tab_ix; // phoneme table number
int pitch_base; // Hz<<12 int pitch_base; // Hz<<12

+ 8
- 5
src/voices.cpp View File

voice->n_harmonic_peaks = 5; voice->n_harmonic_peaks = 5;
voice->peak_shape = 0; voice->peak_shape = 0;
voice->voicing = 64; voice->voicing = 64;
voice->consonant_amp = 90; // change to 85 for v.1.47 was 100
voice->consonant_amp = 90; // change from 100 to 90 for v.1.47
voice->consonant_ampv = 100; voice->consonant_ampv = 100;
voice->samplerate = samplerate_native; voice->samplerate = samplerate_native;
memset(voice->klattv,0,sizeof(voice->klattv)); memset(voice->klattv,0,sizeof(voice->klattv));
int c; int c;
unsigned int value = 0; unsigned int value = 0;


for(ix=0; (ix<4) & ((c = string[ix]) != 0); ix++)
for(ix=0; (ix<4) && ((c = string[ix]) != 0); ix++)
{ {
value = (value << 8) | (c & 0xff); value = (value << 8) | (c & 0xff);
} }


// which directory to look for a named voice. List of voice names, must end in a space. // which directory to look for a named voice. List of voice names, must end in a space.
static const char *voices_asia = static const char *voices_asia =
"bn fa fa-pin hi hy hy-west id ka kn ku ml ms ne pa ta te tr vi vi-hue zh zh-yue ";
"az bn fa fa-pin hi hy hy-west id ka kn ku ml ms ne pa ta te tr vi vi-hue vi-sgn zh zh-yue ";
static const char *voices_europe = static const char *voices_europe =
"an bg bs ca cs cy da de el en en-us es et fi fr fr-be ga hr hu is it lt lv mk nl no pl pt-pt ro ru sk sq sr sv "; "an bg bs ca cs cy da de el en en-us es et fi fr fr-be ga hr hu is it lt lv mk nl no pl pt-pt ro ru sk sq sr sv ";




new_translator = SelectTranslator(translator_name); new_translator = SelectTranslator(translator_name);
langopts = &new_translator->langopts; langopts = &new_translator->langopts;
strncpy0(voice->language_name, language_name, sizeof(voice->language_name));
} }
} }
break; break;
} }


DoVoiceChange(voice); DoVoiceChange(voice);
voice_selector.languages = voice->language_name;
SetVoiceStack(&voice_selector, variant_name); SetVoiceStack(&voice_selector, variant_name);
return(EE_OK); return(EE_OK);
} }
LoadVoice(variant_name,2); LoadVoice(variant_name,2);
} }
DoVoiceChange(voice); DoVoiceChange(voice);
voice_selector.languages = voice->language_name;
SetVoiceStack(&voice_selector, variant_name); SetVoiceStack(&voice_selector, variant_name);
return(EE_OK); return(EE_OK);
} }
ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec)
{//======================================================================== {//========================================================================
char path_voices[sizeof(path_home)+12]; char path_voices[sizeof(path_home)+12];
#ifdef PLATFORM_RISCOS #ifdef PLATFORM_RISCOS
if(n_voices_list == 0) if(n_voices_list == 0)
{ {

Loading…
Cancel
Save