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

@@ -143,6 +143,7 @@ dictionaries: src/espeak \
espeak-data/af_dict \
espeak-data/am_dict \
espeak-data/an_dict \
espeak-data/az_dict \
espeak-data/bg_dict \
espeak-data/bn_dict \
espeak-data/ca_dict \
@@ -220,6 +221,12 @@ 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 ..

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
dictsource/bg_extra:
touch dictsource/bg_extra

+ 52
- 33
dictsource/an_list View File

@@ -57,6 +57,7 @@ _y je
y je $atend
ch tSe
ll 'El^e
ny n^e
á 'a||akTEntw'aDa
é 'e||akTEntw'aDa
í 'i||akTEntw'aDa
@@ -118,9 +119,10 @@ _x#º %o // for 1º 2º 3º
_x#ª %a
º orDin'al||maskul'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
_2ox seQ'und
@@ -183,6 +185,7 @@ $ d'olar
\ kontraBaRRa
| b'aRRaBertik'al
° graUs
(1 °) un||gr'aU

_- gj'on
! TaRR'ar||eksklamaTj'on
@@ -471,40 +474,56 @@ witsa $abbrev


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

+ 6
- 0
dictsource/an_rules View File

@@ -1,3 +1,4 @@

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

@@ -111,6 +112,7 @@
i i
i (u_ i
i (A j


.group j
@@ -168,6 +170,7 @@


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

+ 110
- 0
dictsource/az_list View File

@@ -0,0 +1,110 @@
// 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

@@ -0,0 +1,137 @@
// 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

@@ -1,4 +1,6 @@
// Translation rules for Bengali

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

// Numbers
@@ -7,7 +9,7 @@ _0 S'unjO
_1 '&k
_2 d'uj
_3 t'in
_4 tS'ar
_4 tSh'ar
_5 p'a~tS
_6 tS#'Oj
_7 S'at
@@ -15,7 +17,7 @@ _8 'at.#
_9 n'Oj

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


@@ -23,7 +25,7 @@ _10 d'OS
_11 '&garo
_12 b'arO
_13 t'erO
_14 tS'oddO
_14 tSh'oddO
_15 p'OnerO
_16 S'olO
_17 S'OterO
@@ -39,86 +41,86 @@ _25 p'O~tSiS
_26 tSh'abbiS
_27 Sat'aS
_28 'at.#aS
_29 unOtr'iS
_29 'unOtr'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
_37 Sa~itr'iS
_38 at.tr'iS
_37 S'a~itr'iS
_38 'at.tr'iS
_39 'unOtSOll'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.
_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
_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
_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
_0M1 h'ajar
@@ -133,7 +135,7 @@ _dpt _d'Osomik_
খ k#O
গ gO
ঘ g#O
ঙ 'uNO~
ঙ 'uNgO~
চ tSO
ছ tShO // [h] to distinguish from [tS]
জ JO
@@ -174,9 +176,9 @@ _dpt _d'Osomik_
অ O
আ a
ই hrOS:o'i
ঈ dirg#o'i
ঈ d'i:rg#o'i
উ hrOS:o'u
ঊ dirg#o'u
ঊ d'i:rg#o'u
ঋ ri
ঔ ow

@@ -190,10 +192,10 @@ _ও o

// combining vowel signs
া '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
ে 'ekar
ৈ 'ojkar

+ 52
- 42
dictsource/bn_rules View File

@@ -1,4 +1,5 @@

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

// letter groups:
@@ -97,56 +98,58 @@
// Vowel Signs

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

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

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

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

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

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


// Consonants

.group ক
ক kV
ক (B k

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


.group খ
খ k#V
খ (B k#
@@ -164,7 +167,7 @@
.group ঙ
ঙ NV
(B N
ঙ (B N


.group চ
@@ -173,8 +176,8 @@


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

.group জ
@@ -194,7 +197,7 @@
.group ঞ
ঞ nV
(B n
ঞ (B n

.group ট
@@ -232,6 +235,7 @@
.group ত
ত tV
ত (B t
ত (_ to

.group থ
@@ -281,7 +285,8 @@
.group য়
য় jV
য় (B j
_) য় (B j
য় (B // used to separate 2 vowels

.group য
@@ -289,7 +294,8 @@
য (B dZ
য় jV // nukta
য় (B j
_) য় (B j
য় (B

্) য (C & // ব্যস্ত [bæsto]
্) যা & // ব্যাকরণ [bækɔron]
@@ -333,6 +339,7 @@
.group হ
হ hV
হ (B h
হ (_ ho

.group হ্ব
@@ -352,21 +359,24 @@
.group ঢ় // can be ঢ plus nukta
ঢ় hr.V
ঢ় (B hr.
ঢ় (_ hr.o


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

.group ং
ং N // anusvara/onushshor

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

.group ্ // virama/hoshonto
C) ্


.group ়
় // 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

@@ -63,6 +63,8 @@ _#32 l'e:rts'aIC@n
_?? zymb'o:l
_?A b'u:xstA:b@
_cap gr'o:s
_sub 'Unt@R|3_!,IndEks||
_sup 'o:b@R|3_!,IndEks||


// accent names

+ 103
- 53
dictsource/en_list View File

@@ -16,9 +16,10 @@
// ?7 Scottish
// ?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#]
// $alt4 separate 'h', not 'th'
// $alt6 'to'


@@ -105,6 +106,8 @@ _hok h'Uk

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

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

@@ -284,42 +282,42 @@ _ja dZ'ap@ni:z
_zh tS'aIni:z

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


// Arabic letters
@@ -507,7 +505,7 @@ _3o T'3:
_5o f'If
_20o tw'Enti@
_30o T'3:ti@
?3 _30o T'IRti@
?5 _30o T'IRti@
_40o f'o@ti@
_50o f'Ifti@
_60o s'Iksti@
@@ -567,8 +565,10 @@ ie aIi:_! $pause $only
i.e aIi:_! $pause
imo $abbrev
inlb $abbrev
ios $abbrev
irc $abbrev
irs $abbrev
isbn $abbrev
itx $abbrev
(km ²) skw,e@kIl'0mIt3z
lapd $abbrev
@@ -593,6 +593,7 @@ oem $abbrev
ok $abbrev
omg $abbrev
os $abbrev
osx $abbrev
otoh $abbrev
pcie $abbrev
pcmcia $abbrev
@@ -661,8 +662,7 @@ ability a#bIl@ti
ablaut ablaUt
aborigine ab@r'IdZ@ni
abracadabra abr@k@d'abr@
absence abs@ns
absent $1
absentee $3
absent abs'Ent $verb
absentia abs'Ent2i:@
absinthe absInT
@@ -694,6 +694,7 @@ adieu a#dju:
adieus a#dju:z
adieux a#dju:z
adios aDj'o:s
adjective $1
admirable adm@r@b@L
admirably adm@r@bli
admonition adm@n'IS@n
@@ -730,7 +731,7 @@ agog a#g0g
agressive a#grEsIv // misspell
aground a#graUnd
ague eIgju:
aha A:hA:
aha A:h'A:
ahem a#h'Em
ahoy a#hOI
airbus e@bVs
@@ -758,6 +759,7 @@ allover O:l'oUv3
alm A:m
almost O:lmoUst
allspice $1
alt 0lt // not abbrev
alternate O:lt'3:n@t $only
alternate O:lt3neIt $verb
alternately O:lt'3:n@tlI $verbf
@@ -791,7 +793,6 @@ anemometer anIm'0mI2t3
anew a#nju:
?3 anew a#nu:
anime anImeI
anion aneI@n
anise anIs
anniversary anIv'3:s@ri
anon a#n0n
@@ -804,7 +805,7 @@ antibody $1
antichrist $1
anticline $1
antidote $1
antifreze $1
antifreeze $1
antigen $1
antihero $1
antilog $1
@@ -874,6 +875,7 @@ attribute atrIbju:t
attribute $alt3 $verb
au ,oU
aubergine oUb3Zi:n
audi aUdi
auger O:g3
augmentation O:gmEnt'eIS@n
august O:g@st
@@ -972,6 +974,7 @@ blurry bl3:rI
boing bOIN
bolognese b0l@n'eIz
bombard $2
bombardier b0mb3d'i@3
(bon voyage) b0n||vOI'A:Z
bonbon b0nb0n
bonhomie b0n@mi:
@@ -1054,7 +1057,7 @@ capita kapIt@
capitol kapIt@L
caprice ka#pri:s
carafe ka#raf
caramel kar@mEl
?!3 caramel kar@mEl $onlys
caravan kar@van
carburetor kA@b@r'Et3
?3 carburetor kA@b@reIt3
@@ -1075,7 +1078,7 @@ cathedral $alt3
catholic kaTlIk
carotid $alt3
cartel kA@t'El
cavalier $3
cavalier $alt1
caveat kavIat
?3 caveat kavIA:t
caviar kavIA@
@@ -1089,6 +1092,7 @@ celebre sEl'Ebr@
censure sEnS3
ceres si@ri:z
certificate s3tIfIk@t
c'est seI $u
chagrin SagrIn
?3 chagrin Sa#grIn
chalet SaleI
@@ -1151,6 +1155,7 @@ closely kloUslI $verbf // not kloUzlI
closet kl0zI2t
cloth kloUD $verb
c'mon k@m0n
coathanger $alt4
coauthor koU'O:T3
coaxial koU'aksI@l
cobol koUb0l
@@ -1170,6 +1175,7 @@ coincide koUIns'aId
cojones k@hoUneIs
coliseum k0l@s'i:@m
collage k0l'A:Z
collarbone k0l3boUn
college k0lI2dZ
collegiate k@li:dZI@t
colloquial k@loUkwI@L
@@ -1266,6 +1272,7 @@ corral k@r'al
cosmos k0zm0s
?3 cosmos k0zmoUs
cougar ku:g3
counteract $3
countered kaUnt3d
(coup de grâce) ku:d@||gr'A:
coupon ku:p0n
@@ -1441,6 +1448,7 @@ edwardian Edw'O@di@n
efile i:faIl
egg Eg // egging
egregious Igr'i:dZ@s
?!3 egret i:gr@t
eh eI
eid i:d
el ,El $only
@@ -1537,6 +1545,7 @@ eyrie i@ri
facade f@sA:d
façade f@sA:d
facetious $alt3
faculty fak@Lt2i
faeces fi:si:z
fahrenheit far@nhaIt
fairest fe@r@st
@@ -1598,11 +1607,11 @@ fortune fO@tSu:n
foyer fOIeI
freelance fri:laans
freon fri:0n
frequent frI2kwEnt $verb
fricassee frIka#seI
frigate frIg@t
fringer frIndZ3 // infringer
fringing frIndZIN
frisson fri:s'O~
frontend fr'Vnt,End
frontier frVnti@3
?3 frontier frVnt'i@3
@@ -1641,6 +1650,7 @@ gentlemen dZEnt@Lm@n
genuine dZEnju:I#n
geode dZi:oUd
geologist $2
gettin gEt#n-
geyser gi:z3
?3 geyser gaIz3
gibbon gIb@n
@@ -1651,6 +1661,7 @@ gimme gImi
giraffe dZI2raaf
github gIthVb
glacier gleIS3
?3 goddess $alt2
goin ,goUI2n $only // for goin'
gonna g,@n@
goodbye $2
@@ -1672,6 +1683,7 @@ griffon grIf@n
grosvenor groUv@n3
groupie gru:pi
guacamole gwA:ka#m'oUli:
guarantee $3
gucci gu:tSi
gui gu:i $onlys
guinea gIni
@@ -1680,6 +1692,8 @@ gurus gu:ru:z
habitual $alt3
haggis hagIs
haha hA:h'A:
halation $alt3 // in-
halberdier $alt1
halleluiah halI2'lu:j@
hallelujah halI2'lu:j@
halloween $3
@@ -1703,6 +1717,7 @@ hello h@loU
henceforth hEnsfo@T
?3 herb 3:b
hercules h3:kjUli:z
heredity h3rEdI2ti
?3 hereford h3:f3d
heretical hI2rEtI2k@L
hereto hi@3'tu:
@@ -1878,6 +1893,7 @@ kosher koUS3
kowtow kaUt2aU

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

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

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

with wID $u
(with the) w%IDD@2 $nounf
@@ -4153,7 +4202,7 @@ someone sVmw0n

//conjunctions

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

+ 79
- 46
dictsource/en_rules View File

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

.group as
_) as (@ a#s
@@ -1223,11 +1233,10 @@
av (eng a#v
_) av (erC a#v
av (oA a#v
d) av (en av
d) av (id eIv
j) av (a A:v
j) av (el av
l) av (en av
_B) av (en av
al) av (er 'A:v
sc) av (en av
_) avi (A eIvI
@@ -1350,7 +1359,7 @@
bi (ry bI
bi (sc bI
bi (sec b%aI
bi (sh bI
_) bi (sh bI
bi (sm bI
bi (sq bi:
bi (str bi:
@@ -1492,6 +1501,7 @@
bron) ch k
ch (ute S
ch (ure S
za) ch k

.group co
_) co (ag k%oU
@@ -1621,7 +1631,7 @@
co (rro k@
co (rrup k@
_) costar koUstA@
_) counter (@P7 k'aUnt@ // prefix
_) counter (@P7 k'aUnt3 // prefix

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

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

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

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

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

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

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

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

.group w
w w
@@ -5856,6 +5888,7 @@
C) yes (_ aIz
_) yes jEs
yeah jEh
yew ju:
@C) y (gen I
?!3 d) y (nas I
s) ynch Ink
@@ -5963,7 +5996,7 @@
E (ntu 'E
E (ntous 'E
E (o_ I2
Eous (_ =j@s
Eous (_ =i@s
l) E (ps E
l) E (pt E
Eri (A 'i@rI2
@@ -6009,19 +6042,19 @@


.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
16_) 's (_ z
're (_S3 @

+ 3
- 0
dictsource/es_rules View File

@@ -50,8 +50,10 @@ A) ck k
_) d (rA d
_) d (A d
d (A D
d (_ D
d (cY D
d (L03 D
d (v D
m) d d
n) d d
l) d d
@@ -85,6 +87,7 @@ A) ck k
_) gn (A n
_) g (A g
g (A Q
g (_ Q
g (cY Q
g (L03 Q
m) g g

+ 2
- 2
dictsource/fr_rules View File

@@ -698,7 +698,7 @@ _quatrevin) gts (_ z2
_) game (X _^_en
girl _^_en // girl
gh (K _^_en
gy (_ _^_en
@) gy (_ _^_en


.group h
@@ -1497,7 +1497,7 @@ A) wn _^_en
y (nn i

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

+ 15
- 4
dictsource/ga_list View File

@@ -1,7 +1,9 @@
// Irish Gaeilge dictionary
// 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

// letters
@@ -47,7 +49,7 @@ _cap m'o:r
// accent names

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

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

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

+ 91
- 44
dictsource/ga_rules View File

@@ -1,8 +1,10 @@

// translation rules for Irish Gaeilge
// 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
// ?1 allow eclipsis as 2 separate words
@@ -12,7 +14,7 @@
.L03 b bh mb c ch f m mh dh // used for words likemuir or cuid
.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
.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
.L08 lc ll nt bhse // for words like cailc
.L09 cl cr chr f
@@ -21,14 +23,14 @@
.L12 á é ó eo ua // when followed by i
.L13 oc omb
.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
.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
.L20 eo eoir eá eabh io iu iú // slender m
.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
.L24 b mb bh g gh p ph bp m mh

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

.group á
á A:
@) á ,A:
@@ -89,7 +94,7 @@
áinig A:nIg
ái 'A:i

.group ai
ai a#
L04) ai (L17 0#
@@ -99,6 +104,7 @@
m) ai (n 0#
c) ai (th 0#
ch) ai (th 0#
ai (tín 0#
ai (d 0#
p) ai (l 0#
@) ai (L11_ I
@@ -112,8 +118,9 @@
X) aigh 'aI
aigh aI# L04) aill (_ wi:l
aing (_ Ing
ai (llimh '0 // words like Gaillimh


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

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

.group d
d d[ // broad
L01) d dZ // slender
d (L22 dZ // slender
d (L01 d; // slender
i) d (i dZ
?1 _n_) d (@
?1 _n_) d (@
dh Q // broad
dh (ui Q // broad
dh (ao Q // broad
@@ -165,6 +175,11 @@
?1 _) d (_t d[
?1 _) d (_tL01 dZ
_) d' (@P2 d

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

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

.group e
e E#
eá A:
@@ -184,29 +200,39 @@
r) ei (m aI
eighea aI
eighea aI
s) ei (nn aI
sh) ei (nn aI
eigh aI

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

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

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

.group f
f f // broad
f (L22 f; // slender
@@ -225,14 +251,16 @@
fh (éin_ h
fh (L22 ; // slender
@) 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
g g // broad
g (L01 g; // slender
?1 _n_) g (@
?1 _n_) g (@
_) gh Q"
_) gh (L01 Q"j
_) gc g // urú broad
@@ -245,19 +273,24 @@
gh (n X@
gheobh j'o:
gabh gaU
_) gearr (C@P5 g;,aR
_) ghearr (C@P6 Q"j,aR

.group h
h h // silent

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

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

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


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

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

.group n
n n // broad
n (L01 n; // slender
@@ -318,8 +358,8 @@
n (ch n@
c) n @n
ch) n @n
_) nasc (C@@ n,0sk

.group o
o O#
_) o 'O
@@ -342,12 +382,13 @@
odl (a O#l
oí i:

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

ói (p@ 'o:

.group oi
oi O
_L15) oi (+ @'I
@@ -369,15 +410,16 @@
_) oi (leá 'I
oidh aI
oir (_ 'ERR
_sc) oi (r O
oigh (ea aI

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


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

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

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

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


.group ú
ú u:
únmh u:nv

+ 67
- 24
dictsource/hi_rules View File

@@ -49,8 +49,8 @@

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

.group ऋ
ऋ rI
@@ -63,14 +63,19 @@

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

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

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


@@ -79,16 +84,21 @@

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

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

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


@@ -96,6 +106,9 @@

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

.group ि
@@ -106,14 +119,21 @@
.group ी
ी i:
ी (_ i
ी (ँ i~
ीँ (_ i~
ीं (_ i~

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

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

.group ृ
ृ rI
@@ -126,14 +146,21 @@

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

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

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

.group ॉ
@@ -141,16 +168,21 @@

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

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

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

.group ॢ // vowel sign l
@@ -171,6 +203,9 @@
क़ qV
क़ (B q

क्ष kSV
क्ष (B kS
.group ख
ख k#V
ख (B k#
@@ -206,15 +241,20 @@
ज (B J
ज़ zV
ज़ (B z
ज्ञ gjV
ज्ञ (B gj

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


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


.group ट
ट t.V
@@ -239,7 +279,7 @@
ढ़ (B r.h // nukta

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

@@ -297,17 +337,19 @@
न्) म (_ m // n +virama

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

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

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

@@ -332,21 +374,22 @@
_) व wV
_) व (B w
_) व (् v // +virma
व (_ w

.group श
श SV
श (B S

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

.group स
स sV
स (B s

.group ह
ह H
ह HV
ह (B H



+ 1
- 1
dictsource/hu_list View File

@@ -4390,7 +4390,7 @@ elnökét $unstressend
(emelte ki) EmEltE_||ki $unstressend
tagságát $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
méretű $unstressend
ketyeg $unstressend

+ 33
- 3
dictsource/hu_rules View File

@@ -609,7 +609,7 @@ arcüre) g (gyulladás g
orszá) g (gyarapod g
anya) g (gyár g
anya) g (gyűjt g
végi) g (gya g
végi) g (gy g
me) ggy (mag J
me) ggy (íz J:
bádo) g (gy g
@@ -624,7 +624,7 @@ imádsá) g (gyűjt g
ro) ggyj (ék J:
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
dro) g (gyanú g
dro) g (gy g
le) gg (roteszk g:
_agya) g (gy g
anya) g (győz g
@@ -649,6 +649,9 @@ csilla) g (gy g
hazugsá) g (gy g
tőze) g (gy g
doppin) g (gy g
baromsá) g (gy g
tehetsé) g (gy g
bete) g (gy g

.group gy
gy J
@@ -773,6 +776,7 @@ _egyszere) gy (e J:
_huszone) gy (e J:
száze) gy (edik J:
védje) gy (straté J
na) gy (sor J

.group h
h h
@@ -827,6 +831,7 @@ progressz) í (ve i:
sz) í (veré i:
sz) í (verő i:
sz) í (vevő i:
expressz) í (v i:

.group j
j j
@@ -1040,6 +1045,7 @@ teljesítmé) ny (j n^
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
porcelá) n (ny n

.group o
o o
@@ -1203,7 +1209,7 @@ juventu) ss s:
juventu) ssz s: //a radio station name
farka) ssz (em Ss
villamo) ssz (ék Ss
titko) ssz (olgál Ss
titko) ssz (olg Ss
karo) ssz (ék Ss
hú) ssz (elet Ss
vörö) ssz (em Ss
@@ -1722,6 +1728,29 @@ visszaélé) ssz Ss
esé) ssz (erű Ss
webe) ssz Ss
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
@@ -1932,6 +1961,7 @@ szögle) t (szob t
diva) t (cirk t
álla) t (cirk t
szen) t (szob t
koncer) t (jeg t

.group tj
C) tj c

+ 60
- 3
dictsource/hy_list View File

@@ -2,6 +2,8 @@
// This file is UTF8 encoded
// Spelling-to-phoneme words for Armenian

// ?1 West Armenian

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

@@ -52,6 +55,24 @@ d di
e e
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
@@ -82,5 +103,41 @@ _dpt _sto**ak'el_


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

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

// ?1 West Armenian

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

// ligature
.replace
@@ -12,7 +14,7 @@

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

.group բ
@@ -41,7 +43,7 @@
.group է
է e
էօ W
էյ eI
էյ (K eI

.group ը
ը @
@@ -57,7 +59,7 @@
ի i
իւ y
իւ (_ iv
իյ i@
իյ (K i@

.group լ
լ l
@@ -97,8 +99,9 @@
L02) մ (_ m

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

.group ն
ն n
@@ -133,8 +136,8 @@
_) ջ (C dZ@

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

.group ս
ս s
@@ -151,6 +154,7 @@

.group ր
ր r
L02) ր (L02 *
_) ր (C r@
C) ր (_ @r
L02) ր (_ r
@@ -178,7 +182,5 @@
ֆ f
_) ֆ (C f@

.group
$ dol@



+ 16
- 1
dictsource/nl_list View File

@@ -36,6 +36,8 @@ _s Es
_t te:

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

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

+ 64
- 12
dictsource/nl_rules View File

@@ -20,15 +20,17 @@

@@C) a (_ =a:
_) aan (@P3 'a:n
@) aar (_S3 a:r
@) aard (_S4 a:rt
&) aar (_S3 a:r
&) aard (_S4 a:rt
aa (rd_ 'a:
aa (C_ 'a:
z) aa (m_ a:
t) a (bleau a:
@) abel (_ 'a:b@l
@) abele (_ 'a:b@l@
@) ace (_ e:s // ?? interface
m) ach (in %a:S
_) actie (@P5 'Aksi
_) af (C@P2 'Af
_) affich %AfiS
age (_ 'a:Z@
@@ -64,11 +66,16 @@
baan ba:n
&) baar (_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 (zond b%i
_) bijeen bEI'e:n
_) binnen (P6 b'In@n
_) boek (@P4 b'uk
_) boven (P5 b'o:v@n
_) braille (@P7 br'Aj@
_) brand br'And
_) buiten (P6 b'Wyt@n
_) buurt (@@P5 b'yrt // buurtbewoner
@@ -100,6 +107,7 @@
_) be (zem be:
_) be (zig be:
_) beu bY:
_) bezoekers (@P9 b@z'uk@rs


.group c
@@ -114,9 +122,12 @@
@) ci (ë S
ci (o S
ck k
ces (_ s'Es
coach ko:tS

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


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

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

.group ê
ê E

.group f
f f
@@ -334,17 +350,21 @@
@) gi (eus Z
@) gi (euz Z
reli) gi (eu Qij
_) goog (el gu:g

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


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

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


@@ -451,6 +475,9 @@ _) inn (@P2 'I // ?? inneren
k) k

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

&) laan (_S4 la:n
_) lange (@P5 laN@
_) liefdes (@P7 l'ifd@s
@) loog (_ lo:x
@) loos (_S4 lo:s
@) loze (_S4 lo:z@
@@ -482,6 +513,7 @@ _) inn (@P2 'I // ?? inneren

management ma:nIdZm@nt
_) mee (@P3 m'e:
_) mee (rC mI:
menu (_ m@ny
_) mi (cro mi
_) mi (s@ m%I
@@ -498,6 +530,7 @@ _) inn (@P2 'I // ?? inneren
_) mis (loP3 m'Is
_) mis (tA m'Is
_) misver (@ m'Isf@r
_) muziek (@P6 myz'ik

.group n
n n
@@ -512,6 +545,7 @@ _) inn (@P2 'I // ?? inneren
_) na (C@N n'a:
_) na (C% nA
_) na (cht nA
_) najaars (@P7 n'a:ja:rs
_) narci (s n%ArsI
_) na (rc n%A
_) na (der na:
@@ -524,10 +558,11 @@ _) inn (@P2 'I // ?? inneren
na (vig n%a:
_) na (vr na:
_) na (volg@ n%a:
_) noord (@P5 no:rd
_) nieuws (@P6 n'iws
@@) nis (_S3 nIs
@@) nisen (_S5 nIs@n
_) noord (@P5 no:rd
_) notitie (@P7 no:t'itsi


.group o
@@ -571,6 +606,8 @@ _) inn (@P2 'I // ?? inneren
tr) ou (vail u
ouve (rtu uvE
_) over (@P4 ,o:v@r
_) overigen o:v@r@Q@n
_) overheid 'o:v@rhEIt
t) ou (r u:


@@ -628,20 +665,25 @@ _) inn (@P2 'I // ?? inneren
C) r (A r
rr *r

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

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


.group s
@@ -677,7 +719,10 @@ _) inn (@P2 'I // ?? inneren
@) ssi (o S
CAr) sie (_ =zi

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

@@ -767,9 +812,12 @@ _) inn (@P2 'I // ?? inneren
_) ver (@P3 v@r
_) ver (sie_ vEr
_) 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
_) vrijwilligers (@P13 vrEIv#'Il@Q@rs


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


.group x

+ 6
- 6
dictsource/pa_rules View File

@@ -371,12 +371,12 @@
ੱ) ਯ (_ j:

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

.group ਲ
ਲ lV

+ 2
- 2
dictsource/pl_list View File

@@ -121,8 +121,8 @@ _w vu
x iks
y 'igREk
_z zEt
ż Z;Et
ź ZEt
ż ZEt
ź Z;Et

ä $accent
ö $accent

+ 205
- 107
dictsource/pt_list View File

@@ -23,8 +23,8 @@

// accent names
_lig ligad'u*&
_acu &g'udU
_ac2 &g'udUd'uplU
_acu ag'udU
_ac2 ag'udUd'uplU
_brv bR'Evi
_ced sedZ'ilj&
?1 _ced syd'il^&
@@ -69,6 +69,8 @@ v ve // not Roman numbers
x Sis#

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


@@ -115,8 +118,9 @@ _[ ,abRikowS'etSi
_\ b,ax&,iNvertS'id&
_] f,ES&kowS'etSi
_^ s,irku~Nfl'Eksu
_´ as'eINtu,ag'udU
__ s,ublin^'adu
_` gR'avi
_` gR'avi
_{ ,abRiS'avi
?1 _| b,ax&v,ertSik'al
?2 _| b,ax&v,ertSik'aU
@@ -127,8 +131,10 @@ _¡ ,eskl&mas,&U~,iNvertS'id&
_¿ ,iNtex,ogas,&U~,iNvertS'id&

_" '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


@@ -182,12 +188,12 @@ _8X oIt'eINt&
?2 _9X nov'eINt&
_1C0 s'eIN
?1_0C s'eINtus#
?2_0C s'eINtUs#
?2_0C s'eINtUz
_1C s'eINtu
?1_2C duz'eINtus#
?2_2C duz'eINtUz
?1_3C tryz'eNtus#
?2_3C tRez'eNtUz
?1_3C tryz'eINtus#
?2_3C tRez'eINtUz
?1_5C kin^'eINtus#
?2_5C kin^'eINtUz
?1_0M1 m'il_
@@ -293,13 +299,16 @@ unts $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'o*&
engº eInZen^'eI*U
engª eInZen^'eI*&
nº n'u~me*U
sr $dot
?1 sra ,Es;'Errj'a $dot
?2 sra $dot
@@ -333,7 +342,7 @@ me $u $verbf // reflexive
te $u $verbf
nos $u $nounf
la $u
lo $u
lo lU $u
las $u
los $u
se $u
@@ -348,11 +357,10 @@ essa 'Es& $u+ $noun
desse $u+ $nounf
desta $nounf
nesse n'esy $u+ $nounf
aquele &k'ely $u+ $nounf // that
aquela $u+ $nounf
daquele d&k'ely $u+ $nounf
aquele $alt2 $nounf
daquela $u+ $nounf
daquele $alt2 $nounf
que $u // pronunciation is in pt_rules

// possessive adjectives
@@ -374,7 +382,7 @@ nele nely $u1+

// prepositions
de $u $nounf // of,from
do $u $nounf
do du $u $nounf
da $u $nounf
dos $u $nounf
das $u $nounf
@@ -384,7 +392,7 @@ duns $u $nounf
dumas $u $nounf

em $u $noun // in,on,at
no nu $u $nounf
no nU $u $nounf
na $u $nounf
num $u $nounf
numa $u $nounf
@@ -402,7 +410,7 @@ aos $u $nounf
às ,a:s $nounf

para $u // for,to
pro $u $nounf
pro pRU $u $nounf
pra $u $nounf
pros $u $nounf
pras $u $nounf
@@ -426,7 +434,7 @@ com $u // with
// conjunctions
?1 e i $u // and
?2 e i $u // and
se $u+ $verbf // if
se $u+ // if


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


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


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


// foreign product names
?1 access 'aks,Es
?1 adobe &d'Oby
android &NdR'Oid
apple 'Epow
chrome kR'owmi
debian d'Ebj&~N
@@ -1195,22 +1290,27 @@ chrome kR'owmi
?1 express ,Ekspr'Es
espeak isp'i:k
?1 espeakedit isp'i:kEd,it
facebook feisybuk
facebook feIsybuk
?1 fedora _^_EN
firefox f'ai@fOks
?1 front fr'ont
?1 jaws dZ'au:z
?1 linux l,in'uks
?2 linux l'inUks
?1 live l'aiv
live l'aiv
?1 maker m'eIk&r-
mac mEk
?1 media m'Ed,i&
?1 messenger m'Es&ndZ&r-
?1 microsoft m,ik:r'os,Oft
?2 microsoft m'aIkRows'Oft
?1 movie m'uvi
?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
openoffice 'opeIN|'Ofis
?1 outlook 'autl'uk
@@ -1245,15 +1345,16 @@ twitter tw'iter
?2 window w'iNdow


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

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

@@ -69,6 +69,8 @@ _tld s_v'l-novkoU

// character names
_cap vel^ke:
_sub d,olni:||'indeks||
_sup h,oRni:||'indeks||
_?? simbol
_#9 t'ab
_#32 'medzeRa
@@ -76,76 +78,100 @@ _?A znak

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

_! vi:kRitSn^i:k
_" u:vodzovki
_" u:vodzowki
_$ dola:R
_' apostRof
_( za:tvoRka
_) zatvoRit;
_, tSiaRka
_- poml-tSka
__ podtSiaRknutie
_- spojovn^i:k
__ podtSiaRkovn^i:k
_. bodka
_/ lomeno
_/ lomka
_: dvojbodka
_; bodkotSiaRka
_< menSi:
_> vetSSi:
_> v&tSSi:
_? ota:zn^ik
_[ hRanata:||za:tvoRka
_\ opatSne:||lomeno
_] hRanata:||zatvoRit;
_^ stRieZka
_[ hRanata:||z'a:tvoRka
_\ opatSna:||l'omka
_] hRanata:||z'atvoRit;
_^ voka:n^
_` aktsent
_{ zloZena:||za:tvoRka
_| zvisla:||tSiaRa
_} zloZena:||zatvoRit;
_{ zloZena:||z'a:tvoRka
_| zvisla:||tS'iaRa
_} zloZena:||z'atvoRit;
_~ 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
€ euRo
§ paRagRaf
÷ d;eleno
× kRa:t
° stupn^ou
¢ tsentou
£ libjeR
¤ znatSkameni
¢ tsent
£ libRa
¤ mena
© kopiRajt
® Registrovane:
¥ jen
− mi:nus
± plus'mi:nus
µ mu:
¼ Stvr-tina
± plus||m'i:nus
µ mi:
¼ Stvr-t;ina
½ 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

+ 16
- 16
dictsource/tr_list View File

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

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

+ 37
- 23
dictsource/tr_rules View File

@@ -9,8 +9,10 @@
// ?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
` '
@@ -23,7 +25,7 @@
@) acak (_S4 adZak
@) acakmış (_S7 adZakm%@S
@) ayım (_S4 aj@m
@) alım (_S4 al@m
@) alım (_S4 aL@m
@) asın (_S4 as@n

@) avru (pa avr'u
@@ -33,9 +35,11 @@

.group c
c dZ
ce (_S2 dZ%E

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

.group d
d d
@@ -57,13 +61,13 @@
dın (_S3 d@n
dınız (_S5 d@n@z
dı (_S2 d@
dılar (_S5 d@laR
dılar (_S5 d@LaR
dum (_S3 dum
duk (_S3 duk
dun (_S3 dun
dunuz (_S5 dunuz
du (_S2 du
dular (_S5 dular
dular (_S5 duLar
düm (_S3 dym
dük (_S3 dyk
dün (_S3 dyn
@@ -96,18 +100,24 @@

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


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

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

.group h
h h

@@ -135,37 +145,40 @@
@) ıyor (_S4 @j%oR
@) ın (_S2 @n

.group î
î @

.group j
j Z

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

ken (_S3 %cen


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

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

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

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

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


@@ -204,6 +217,7 @@
.group r
r R
A) r (A *
ğ) r (A *

ra (_S2 %Ra
re (_S2 %Re
@@ -308,7 +322,7 @@
yunuz (_S5 %junuz
yünüz (_S5 %jynyz

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

yacak (_S5 jadZak
@@ -317,7 +331,7 @@
yecekmiş (_S8 jedZekm%iS

yayım (_S5 jaj@m
yalım (_S5 jal@m
yalım (_S5 jaL@m
yasın (_S5 jas@n
yeyim (_S5 jejim
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

@@ -13,4 +13,5 @@ formant 6 100 100 100
formant 7 100 100 100
formant 8 100 100 100

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

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

@@ -3,6 +3,8 @@ language hy-west
language hy 8
gender male

dictrules 1

// change consonants for West Armenian pronunciation
replace 00 b p#
replace 00 d t#
@@ -16,5 +18,5 @@ replace 00 ts dz
replace 00 c dZ
replace 00 k g

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

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

@@ -0,0 +1,6 @@
name Korean
language ko
gender male
pitch 80 118
intonation 2


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

@@ -0,0 +1,12 @@
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

@@ -1,4 +1,4 @@
name Irish Gaeilge
name irish-gaeilge
language ga

dictrules 1 // fix for eclipsis

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

@@ -1,4 +1,4 @@
name lancashire
name english-north
language en-uk-north
language en-uk 3
language en 5
@@ -10,6 +10,6 @@ stressLength 160 150 180 180 220 220 290 290

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


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

@@ -4,4 +4,5 @@ language pt
gender male

dictrules 2
stressLength 200 115 230 230 0 0 250 270


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

@@ -0,0 +1,3 @@
name azerbaijani-test
language az


BIN
phsource/envelopes.png View File


+ 10
- 1
phsource/intonation View File

@@ -16,7 +16,16 @@ nucleus0 fall-rise 80 18
nucleus fall-rise2 78 22 34 52
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
headenv fall 16
head 4 75 43 -7 0

+ 2
- 1
phsource/mbrola/fr1 View File

@@ -1,3 +1,4 @@
volume 17

0 l/2 NULL 0 l
0 l/ NULL 0 l
@@ -10,7 +11,6 @@
0 j/ NULL 0 j
0 ; NULL 0 NULL
0 g- NULL 0 NULL
0 @- NULL 0 NULL
0 @3 NULL 0 NULL
0 * NULL 0 R
0 : NULL 0 NULL
@@ -43,6 +43,7 @@
0 z2 NULL 0 z
0 z3 NULL 0 z

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

+ 16
- 10
phsource/ph_azerbaijani View File

@@ -1,19 +1,22 @@

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

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

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

@@ -25,32 +28,35 @@ endphoneme

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

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

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

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

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


+ 11
- 11
phsource/ph_base2 View File

@@ -7,7 +7,7 @@

phoneme a
vowel starttype #a endtype #a
length 180
length 190
IF thisPh(isDiminished) THEN
ChangePhoneme(a/)
FMT(vowel/a#)
@@ -18,28 +18,28 @@ endphoneme

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


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


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


phoneme i
vowel starttype #i endtype #i
length 150
length 170
IfNextVowelAppend(;)
FMT(vowel/i)
endphoneme
@@ -47,42 +47,42 @@ endphoneme

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


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


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


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


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


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


+ 5
- 2
phsource/ph_bengali View File

@@ -17,8 +17,11 @@ phoneme V // inherent vowel, can be [O] or [o]
ChangePhoneme(o)
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


+ 208
- 140
phsource/ph_danish View File

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

// Change the length of short vowels (?+vowel)
// Change the length of SHORT vowels (?+vowel)
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
// 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
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")
// Exit the procedure
RETURN
ENDIF
RETURN
ENDIF
ENDIF
// "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
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
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
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

// Change the length of normal vowels (without ? in front of them)
// Change the length of NORMAL vowels (without ? in front of them)
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
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]
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]
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
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
// 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
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
// "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
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])
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

// A bit longer than [@-]
@@ -167,22 +267,6 @@ endphoneme
phoneme i
vowel starttype #i endtype #i
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
FMT(vowel/i_4)
endphoneme
@@ -209,7 +293,7 @@ phoneme e
vowel starttype #e endtype #e
length 140
CALL LongVowelLength
CALL ShortVowelLength
// CALL ShortVowelLength
FMT(vowel/e)
endphoneme

@@ -257,7 +341,7 @@ endphoneme

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

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

@@ -406,6 +494,7 @@ endphoneme
phoneme ?V
vowel starttype #@ endtype #@
length 140
CALL ShortVowelLength
FMT(vowel/V_4)
endphoneme

@@ -416,34 +505,19 @@ phoneme 0
FMT(vowel/oo_2)
endphoneme

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

phoneme y
vowel starttype #i endtype #i
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)
endphoneme

@@ -468,15 +542,7 @@ endphoneme
phoneme W
vowel starttype #@ endtype #@
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)
endphoneme

@@ -492,11 +558,8 @@ endphoneme
// Added for the ø in "røv", "røg", "øje" instead of [V3]
phoneme W#
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)
endphoneme

@@ -540,7 +603,7 @@ phoneme l
lengthmod 7
// [ll] => [-l] - avoid double l
IF nextPhW(l) THEN
// ChangePhoneme(-)
// ChangePhoneme(NULL)
ENDIF
ChangePhoneme(l/3)
// CALL base/l
@@ -565,6 +628,10 @@ phoneme r // used for 'r' after a vowel (to create a diphthong)
IF nextPhW(isVowel) AND NOT nextPhW(?V) AND NOT nextPhW(V) AND NOT nextPhW(@-) THEN
ChangePhoneme(R)
ENDIF
// "generer" [Sen'e:Vr], "mysterier" - delete the r
IF prevPhW(V) AND thisPh(isWordEnd) THEN
ChangePhoneme(NULL)
ENDIF
FMT(r/a_)
endphoneme

@@ -637,7 +704,7 @@ IF thisPh(isWordEnd) THEN
ENDIF
IF nextPhW(isVowel) THEN
NextVowelStarts
VowelStart(j/j@)
VowelStart(j/j@,-45) // jøderne
VowelStart(j/ja)
VowelStart(j/je,-35)
VowelStart(j/ji)
@@ -655,4 +722,5 @@ Vowelout len=70
Vowelout len=70
FMT(j/j_)
ENDIF
endphoneme
endphoneme


+ 2
- 2
phsource/ph_english_us View File

@@ -263,8 +263,8 @@ endphoneme

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



+ 39
- 16
phsource/ph_hindi View File

@@ -13,7 +13,7 @@ phoneme @
length 130

ChangeIfDiminished(@-)
IF nextPh(H) THEN
IF nextPh(H) OR prevPh(H) THEN
FMT(vowel/@_low)
ENDIF
FMT(vowel/@_bck)
@@ -24,6 +24,11 @@ phoneme V
vowel flag1 starttype #@ endtype #@
length 130

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

IF thisPh(isNotStressed) THEN
IF prevPh(H) THEN
ChangePhoneme(@)
@@ -33,15 +38,11 @@ phoneme V
ChangePhoneme(NULL)
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
IF NOT thisPh(isFirstVowel) THEN
// delete if not the first vowel, and is an isolated 'a'
ChangePhoneme(NULL)
ENDIF
ChangePhoneme(NULL)
ENDIF
ENDIF
ENDIF
@@ -55,7 +56,7 @@ phoneme V
ChangePhoneme(@)
ENDIF

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

@@ -208,25 +212,25 @@ endphoneme

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

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

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

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

@@ -244,7 +248,7 @@ endphoneme

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

@@ -513,3 +517,22 @@ phoneme #X2 // click, use for indicating combining long vowels
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

@@ -113,7 +113,7 @@ endphoneme
phoneme U
vowel starttype #u endtype #u
length 130
IF nextPh(isVowel) THEN
IF thisPh(isWordEnd) AND thisPh(isAfterStress) AND nextPh(isVowel) THEN
ChangePhoneme(w)
ENDIF
FMT(vowel/u_6)

+ 1
- 1
phsource/ph_pt_brazil View File

@@ -135,7 +135,7 @@ endphoneme
phoneme U
vowel starttype #u endtype #u
length 140
IF thisPh(isWordEnd) AND nextPh(isVowel) THEN
IF thisPh(isWordEnd) AND thisPh(isAfterStress) AND nextPh(isVowel) THEN
ChangePhoneme(w)
ENDIF
FMT(vowel/uu_bck)

+ 13
- 8
phsource/ph_spanish View File

@@ -6,44 +6,44 @@

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

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

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

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

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

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

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

@@ -107,11 +107,16 @@ phoneme D
voicingswitch T
CALL base/D
IF nextPh(isPause2) THEN
FMT(voc/dh_) addWav(vocw/dh, 40) // weaker
FMT(voc/dh_) addWav(vocw/dh, 35) // weaker
ENDIF
endphoneme


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


phoneme s
vls alv frc sibilant
lengthmod 3

+ 37
- 17
phsource/ph_turkish View File

@@ -2,7 +2,7 @@

phoneme i
vowel starttype #i endtype #i
length 150
length 180
IF thisPh(isTranslationGiven) THEN
// don't reduce the vowel if phonemes are explicitly given
ELSE
@@ -18,14 +18,14 @@ endphoneme

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


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

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

@@ -49,10 +49,16 @@ endphoneme

phoneme e
vowel starttype #e endtype #e
length 180
length 200
IF thisPh(isTranslationGiven) THEN
// don't reduce the vowel if phonemes are explicitly given
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
ChangePhoneme(E)
ENDIF
@@ -65,21 +71,27 @@ endphoneme

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

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


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


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

@@ -87,7 +99,7 @@ endphoneme

phoneme u
vowel starttype #u endtype #u
length 150
length 180
IF thisPh(isTranslationGiven) THEN
// don't reduce the vowel if phonemes are explicitly given
ELSE
@@ -103,7 +115,7 @@ endphoneme

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

@@ -111,7 +123,7 @@ endphoneme
phoneme @
vowel starttype #@ endtype #@
ipa ɯ
length 150
length 180
FMT(vowel/u#_7)
endphoneme

@@ -119,7 +131,7 @@ endphoneme

phoneme o
vowel starttype #o endtype #o
length 190
length 200
IF thisPh(isTranslationGiven) THEN
// don't reduce the vowel if phonemes are explicitly given
ELSE
@@ -135,7 +147,7 @@ endphoneme

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

@@ -179,12 +191,20 @@ phoneme J
endphoneme


phoneme l
import_phoneme en/l
endphoneme

phoneme G
import_phoneme en/r/
lengthmod 7
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

@@ -18,13 +18,13 @@ endphoneme

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


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


@@ -54,33 +54,33 @@ endphoneme

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

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


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

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


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

phoneme o
@@ -110,7 +110,7 @@ phoneme o
ELSE
length 200
ENDIF
FMT(vowel/o_2)
FMT(vowel/o) // o_2)
endphoneme


@@ -119,9 +119,9 @@ phoneme u
IF nextPh(kh) OR nextPh(N) THEN // hear as ung sound
length 120
ELSE
length 200
length 240
ENDIF
FMT(vnasal/u_n) //vowel/u_7)
FMT(vowel/u_5)
endphoneme

phoneme y
@@ -129,7 +129,7 @@ phoneme y
IF nextPh(kh) OR nextPh(N) THEN
length 120
ELSE
length 200
length 180
ENDIF
FMT(vowel/u#_5)
endphoneme
@@ -138,10 +138,10 @@ endphoneme

phoneme @
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
ELSE
length 170
length 200
ENDIF
FMT(vowel/V) //vowel/@_2)
endphoneme
@@ -149,7 +149,7 @@ endphoneme

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

@@ -160,8 +160,8 @@ endphoneme

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


@@ -188,14 +188,14 @@ endphoneme

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


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

@@ -203,7 +203,7 @@ endphoneme
phoneme OI
vowel starttype #o endtype #i
length 200
FMT(vdiph/0i)
FMT(vdiph/ooi_3)
endphoneme


@@ -231,14 +231,14 @@ endphoneme

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


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

@@ -258,19 +258,19 @@ endphoneme

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

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

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

@@ -278,19 +278,19 @@ endphoneme

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

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

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

@@ -298,39 +298,67 @@ endphoneme

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

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


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

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

phoneme iE // iê : viết, giệc
vowel starttype #i endtype #e
length 190
length 140
FMT(vietnam/ie_2)
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
vls vel frc
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
WAV(vietnam/_c,5) //ufric/x, 50)
endphoneme
@@ -338,11 +366,11 @@ endphoneme

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

//CALL vowelstart_l

FMT(l/l_vi)
@@ -352,7 +380,7 @@ phoneme t
vls alv stop
//voicingswitch d
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

WAV(vietnam/th, 50)
@@ -362,7 +390,7 @@ phoneme cr
vls pla afr sibilant
//voicingswitch dZ
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)
@@ -370,10 +398,10 @@ endphoneme

phoneme d
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)
endphoneme
@@ -381,9 +409,9 @@ WAV(vietnam/dd)
vls pal stop palatal
//voicingswitch J
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)
@@ -402,18 +430,20 @@ endphoneme

phoneme n
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
FMT(n/n#_)
length 75
FMT(n/nr_)
endphoneme

phoneme t[ // dental variant of /t/
vls dnt stop
voicingswitch d[
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
WAV(ustop/t_unasp2, 5)

+ 42
- 5
phsource/ph_vietnam_hue View File

@@ -6,31 +6,31 @@

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


phoneme 2 // huyền tone: low falling
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


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


phoneme 4 // hỏi Tone(curve (dipping rising)
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


phoneme 5 // ngã tone: broken (creaking rising)
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


@@ -46,4 +46,41 @@ phoneme 7 // Tone(1 (ngang) at end of clause
Tone(5, 40, envelope/p_level, NULL) //Tone(99, 50, envelope/p_fall, NULL) // 40 20
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

@@ -0,0 +1,97 @@
//====================================================
// 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

@@ -616,8 +616,8 @@ phoneme w

VowelEnding(w/xw, -30)

IF prevPh(isPause) THEN
FMT(w/_w)
IF prevPhW(isNasal) THEN
FMT(w/w)
ELSE
FMT(w/_w)
ENDIF
@@ -634,7 +634,7 @@ endphoneme


phoneme j
liquid palatal
liquid palatal starttype #i
lengthmod 7

IF nextPhW(isVowel) THEN
@@ -1610,7 +1610,7 @@ phoneme x
Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20

IF nextPh(isPause) THEN
WAV(ufric/x, 110)
WAV(ufric/x_, 60)
ENDIF
WAV(ufric/x_hr, 20)
endphoneme
@@ -1745,9 +1745,6 @@ include ph_kannada
phonemetable ml hi
include ph_malayalam

phonemetable te hi
include ph_telugu



phonemetable hu base
@@ -1833,6 +1830,9 @@ include ph_vietnam
phonemetable vi-hue vi
include ph_vietnam_hue

phonemetable vi-sgn vi
include ph_vietnam_sgn

phonemetable zhy base
include ph_zh_yue

@@ -1867,31 +1867,14 @@ include ph_georgian
phonemetable fa base
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.
// These langauges are not in a usable state.
// 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
//include ph_marathi
@@ -1902,42 +1885,67 @@ include ph_slovenian
//phonemetable mn base
//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

@@ -2,8 +2,8 @@


# 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 $@
ObjAsmflags = -throwback -NoCache -depend !Depend
CMHGflags =
@@ -27,38 +27,64 @@ Squeezeflags = -o $@
# User-editable 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
objasm $(objasmflags) -from @.s.assemb -to @.o.assemb

# 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

@@ -38,7 +38,7 @@
#define os_X 0x20000

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


@@ -51,7 +51,7 @@ extern int callback_entry(_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 Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume);
extern void RiscosOpenSound();
@@ -75,12 +75,13 @@ char path_home[N_PATH_HOME] = "";
char wavefile[120];
char textbuffile[L_tmpnam];
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_variant_files = 0;

// output sound buffer, 2 bytes per sample
static unsigned short SoundBuf[4096];
static short SoundBuf[4096];
static void *module_data;
static int callback_inhibit = 0;
static int more_text=0;
@@ -131,9 +132,10 @@ static const char *help_text =
"--punct=\"<characters>\"\n"
"\t Speak the names of punctuation characters during speaking. If\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"
"\t Indicate capital letters with: 1=sound, 2=the word \"capitals\",\n"
"\t higher values = a pitch increase (try -k20).\n";
@@ -169,9 +171,6 @@ int GetFileLength(const char *filename)
} /* end of GetFileLength */


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

void ReadVoiceNames2(char *directory)
{//==================================
@@ -194,6 +193,9 @@ void ReadVoiceNames2(char *directory)

path_len = strlen(directory);

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

while(regs.r[3] > 0)
{
error = _kernel_swi(0x0c+os_X,&regs,&regs); /* OS_GBPB 10, read directory entries */
@@ -363,8 +365,8 @@ static void CloseWaveFile(int rate)



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.
} // end of MarkerEvent

@@ -452,6 +454,7 @@ void speak_text_string(char *data, int terminator, int len, int wait, int voice_
{
int c;
int ix;
char *vname;
static static_length=0;
static int user_token=0; /* increment for each call of translate() */
_kernel_swi_regs regs;
@@ -462,12 +465,13 @@ void speak_text_string(char *data, int terminator, int len, int wait, int voice_

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]);
WavegenSetVoice(voice);
WavegenSetVoice(voice);
}
current_voice_num = voice_num;
strcmp(current_voice_name, vname);

/* don't count CR as terminator if length is specified */
if(len > 0) terminator = 0;
@@ -593,8 +597,16 @@ void set_say_options(int reg2, int reg3)
option_waveout = 0;
option_multibyte = 0; // auto
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 */


@@ -621,7 +633,7 @@ void jsd_swi_functions(int *r)
case 3:
// translate into phonemes
use_ipa = 0;
if((r[2] >= 1) && (use_ipa <= 3))
if((r[2] >= 1) && (r[2] <= 5))
use_ipa = r[2];
TranslateClause(translator,NULL,(char *)r[1],NULL,NULL);
GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), use_ipa);
@@ -641,7 +653,7 @@ void jsd_swi_functions(int *r)
if(r[1] < N_VOICE_NAMES)
{
SetVoiceByName(voice_names[r[1]]);
current_voice_num = r[1];
strcmp(current_voice_name, voice_names[r[1]]);
WavegenSetVoice(voice);
}
break;
@@ -675,6 +687,8 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw)
int value;
int value2;
int q_length;
char *p;
int ix;
value = r[0];

switch(swi_no)
@@ -682,16 +696,17 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw)

case 0: // ready ?
// 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
r[1] = current_source_index; /* source index */
r[1] = ix; /* source index */
r[2] = 0; /* source tag */
r[3] = 0; /* for future expansion */
r[4] = 0;
r[5] = 0;

if(WcmdqUsed() < 5)
if((WcmdqUsed() < 5) && (more_text == 0))
{
r[0] = -1; /* ready, or nearly */
}
@@ -774,8 +789,30 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw)
break;

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;
}
return(NULL);
@@ -814,7 +851,7 @@ void DisplayVoices(FILE *f_out, char *language)
const espeak_VOICE **voices;
espeak_VOICE voice_select;

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

if(language[0] == '=')
{
@@ -837,11 +874,24 @@ void DisplayVoices(FILE *f_out, char *language)
{
count = 0;
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)
{
len = strlen(p+1);
lang_name = p+1;


if(v->age == 0)
strcpy(age_buf," ");
else
@@ -859,8 +909,6 @@ void DisplayVoices(FILE *f_out, char *language)
count++;
p += len+2;
}
// if(scores)
// fprintf(f_out,"%3d ",v->score);
fputc('\n',f_out);
}
} // end of DisplayVoices
@@ -910,9 +958,9 @@ void command_line(char *arg_string, int wait)
int option_index = 0;
int c;
int value;
int speed;
int amp;
int wordgap;
int speed = 175;
int amp = 100;
int wordgap = 0;
int speaking = 0;
int flag_stdin = 0;
int flag_compile = 0;
@@ -923,15 +971,15 @@ void command_line(char *arg_string, int wait)
char command[80];
char *p;
int ix;
int quiet;
int quiet = 0;

voicename[0] = 0;
wavefile[0] = 0;
filename[0] = 0;
option_ssml = 0;
option_linelength = 0;
option_phonemes = 0;
option_waveout = 0;
quiet = 0;
option_multibyte = 0; // auto
option_capitals = 0;
option_punctuation = 0;
@@ -963,7 +1011,6 @@ void command_line(char *arg_string, int wait)

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

case 'x':
@@ -996,17 +1043,14 @@ void command_line(char *arg_string, int wait)

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

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

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

case 'v':
@@ -1049,7 +1093,6 @@ void command_line(char *arg_string, int wait)
option_punctlist[N_PUNCTLIST-1] = 0;
option_punctuation = 2;
}
SetParameter(espeakPUNCTUATION,option_punctuation,0);
}
else
if(memcmp(command,"version",7)==0)
@@ -1080,6 +1123,12 @@ void command_line(char *arg_string, int wait)
}
}

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)
quiet = 1; // can't call sprintf() during callback

@@ -1241,17 +1290,39 @@ int sound_handler(_kernel_swi_regs *r, void *pw)
int size;
int *dma_buf;
int x;
int x2;
int ix;

module_data = (int *)pw;
dma_buf = (int *)r->r[1];
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();
@@ -1287,10 +1358,15 @@ int InitSound16(int sample_rate)
int srate;
int n_srix;
int ix;
int double_rate_ix = -1;
int nearest_ix;
int nearest_diff = 0x7fffffff;
int diff;
_kernel_swi_regs regs;
_kernel_oserror *error;

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

regs.r[0] = 1;
@@ -1314,14 +1390,32 @@ int InitSound16(int sample_rate)
regs.r[0] = 2;
regs.r[1] = ix;
_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);
}
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


@@ -1369,7 +1463,7 @@ _kernel_oserror *user_init(char *cmd_fail, int podule_base, void *pw)
// other characters give the correct results with iswalpha() etc.

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

module_data = pw;


+ 14
- 14
platforms/riscos/copysource View File

@@ -1,17 +1,17 @@
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.sintab/h <obey$dir>.h.sintab fq~c

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

@@ -2,7 +2,7 @@
[Setup]
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).
WindowVisible=yes

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

@@ -1,7 +1,7 @@
[Setup]
AppName=eSpeakEdit
AppVerName=eSpeakEdit version 1.47.04
AppVerName=eSpeakEdit version 1.47.08
DefaultDirName={pf}\eSpeak
DefaultGroupName=eSpeak
OutputBaseFilename=setup_espeakedit

+ 6
- 1
src/compiledata.cpp View File

@@ -2727,7 +2727,6 @@ static void DecThenCount()
static void InstnPlusPhoneme(int instn)
{//====================================
int phcode;
DecThenCount();

phcode = NextItemBrackets(tPHONEMEMNEM,0);
*prog_out++ = instn + phcode;
@@ -2835,16 +2834,19 @@ int CompilePhoneme(int compile_phoneme)
case i_CHANGE_IF+2:
case i_CHANGE_IF+3:
InstnPlusPhoneme(keyword << 8);
DecThenCount();
break;

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

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

case i_SET_LENGTH:
@@ -2936,6 +2938,7 @@ int CompilePhoneme(int compile_phoneme)
{
*prog_out++ = (ipa_buf[ix+start] << 8) + (ipa_buf[ix+start+1] & 0xff);
}
DecThenCount();
break;
}
break;
@@ -3018,6 +3021,7 @@ int CompilePhoneme(int compile_phoneme)

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

case kFMT:
@@ -3049,6 +3053,7 @@ int CompilePhoneme(int compile_phoneme)
break;

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


+ 3
- 2
src/compiledict.cpp View File

@@ -133,6 +133,7 @@ MNEM_TAB mnem_flags[] = {
{"$stem", 0x30}, // must have a suffix
{"$atend", 0x31}, // use this pronunciation if at end of clause
{"$atstart", 0x32}, // use this pronunciation at start of clause
{"$native", 0x33}, // not if we've switched translators

// doesn't set dictionary_flags
{"$?", 100}, // conditional rule, followed by byte giving the condition number
@@ -700,9 +701,9 @@ static int compile_line(char *linebuf, char *dict_line, int *hash)
ix = utf8_in(&c2,p);
if(c2 == 0)
break;
if(iswupper(c2))
if(iswupper2(c2))
{
utf8_out(towlower(c2),p);
utf8_out(towlower2(c2),p);
}
else
{

+ 60
- 16
src/dictionary.cpp View File

@@ -524,7 +524,7 @@ void DecodePhonemes(const char *inptr, char *outptr)
unsigned short ipa1[96] = {
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,
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,
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
@@ -633,10 +633,13 @@ char *WritePhMnemonic(char *phon_out, PHONEME_TAB *ph, PHONEME_LIST *plist, int



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.

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;
@@ -649,6 +652,9 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa)
char *buf;
int count;
int flags;
int use_ipa;
int use_tie;
int separate_phonemes = 0;
char phon_buf[30];
char phon_buf2[30];
PHONEME_LIST *plist;
@@ -656,6 +662,16 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa)
static const char *stress_chars = "==,,''";
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)
{
for(ix=1; ix<(n_phoneme_list-2); ix++)
@@ -663,8 +679,21 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa)
buf = phon_buf;

plist = &phoneme_list[ix];

WritePhMnemonic(phon_buf2, plist->ph, plist, use_ipa, &flags);
if(plist->newword)
*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)
{
@@ -687,22 +716,23 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa)
if(c != 0)
{
buf += utf8_out(c, buf);
// if(separate_phonemes)
// *buf++ = separate_phonemes;
}
}
}

flags = 0;
WritePhMnemonic(phon_buf2, plist->ph, plist, use_ipa, &flags);
count = 0;
for(p=phon_buf2; *p != 0;)
{
p += utf8_in(&c, p);
if(use_ipa > 1)
if(use_tie > 0)
{
// 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);
@@ -894,7 +924,13 @@ int Unpronouncable(Translator *tr, char *word, int posn)

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

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

if(IsVowel(tr, c))
{
@@ -902,7 +938,7 @@ int Unpronouncable(Translator *tr, char *word, int posn)
break;
}

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

@@ -1624,8 +1660,11 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags,
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
int gap = tr->langopts.word_gap & 0x700;
@@ -2078,7 +2117,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_
break;

case RULE_NONALPHA:
if(!iswalpha(letter_w))
if(!iswalpha2(letter_w))
{
add_points = (21-distance_right);
post_ptr += letter_xbytes;
@@ -2322,7 +2361,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_
break;

case RULE_NONALPHA:
if(!iswalpha(letter_w))
if(!iswalpha2(letter_w))
{
add_points = (21-distance_right);
pre_ptr -= letter_xbytes;
@@ -2639,7 +2678,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c
if(tr->letter_bits_offset > 0)
{
// 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);
return(0);
@@ -3240,6 +3279,11 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor
continue;
}
}
if(dictionary_flags2 & FLAG_NATIVE)
{
if(tr != translator)
continue; // don't use if we've switched translators
}
if(dictionary_flags & FLAG_ALT2_TRANS)
{
// language specific
@@ -3505,9 +3549,9 @@ int LookupFlags(Translator *tr, const char *word)
{//==============================================
char buf[100];
static unsigned int flags[2];
char *word1 = (char *)word;

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

+ 13
- 9
src/espeak.cpp View File

@@ -20,6 +20,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#ifndef NEED_GETOPT
#include <getopt.h>
#endif
@@ -67,7 +68,7 @@ static const char *help_text =
"\t Compile pronunciation rules and dictionary from the current\n"
"\t directory. <voice name> specifies the language\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"
"\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"
@@ -221,14 +222,17 @@ int OpenWavFile(char *path, int rate)
if(path == NULL)
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)
{
fprintf(stderr,"Can't write to: '%s'\n",path);
@@ -620,7 +624,7 @@ int main (int argc, char **argv)
{
value = -1;
sscanf(optarg2,"%d",&value);
if((value<0) || (value>2))
if((value<0) || (value>3))
{
fprintf(stderr,"Bad value for -ipa=\n");
value = 0;

+ 8
- 1
src/espeakedit.cpp View File

@@ -199,6 +199,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(MENU_OPT_SPEED, MyFrame::OnOptions)
EVT_MENU(MENU_OPT_PUNCT, 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_PATH1, MyFrame::OnOptions)
EVT_MENU(MENU_PATH2, MyFrame::OnOptions)
@@ -625,6 +626,12 @@ void OnOptions2(int event_id)
break;

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->SetInsertionPointEnd();
notebook->SetSelection(1);
@@ -632,7 +639,7 @@ void OnOptions2(int event_id)

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

+ 88
- 4
src/extras.cpp View File

@@ -1564,8 +1564,8 @@ void CountWordFreq(wxString path, wcount **hashtab)
for(k=0; k<ix; )
{
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]);
n_chars++;
@@ -2272,6 +2272,82 @@ void Test2()

#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.";
@@ -2290,6 +2366,7 @@ void TestTest(int control)
//CharsetToUnicode("ISO-8859-4");
//CharsetToUnicode("ISCII");


if(control==2)
{
return;
@@ -2319,9 +2396,16 @@ if(control==2)
espeak_SetSynthCallback(TestSynthCallback);
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(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_Synchronize();

+ 1
- 0
src/main.h View File

@@ -127,6 +127,7 @@ enum {
MENU_OPT_SPEED,
MENU_OPT_PUNCT,
MENU_OPT_SPELL,
MENU_OPT_SPELL2,
MENU_PATHS,
MENU_PATH0,
MENU_PATH1,

+ 4
- 2
src/menus.cpp View File

@@ -119,8 +119,10 @@ wxMenuBar *MakeMenu(int type, const char *dict_name)
option_menu = new wxMenu;
option_menu->Append(MENU_PATHS, _("Set &paths"), paths_menu);
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
vowelchart_menu = new wxMenu;

+ 148
- 9
src/numbers.cpp View File

@@ -582,7 +582,103 @@ void LookupLetter(Translator *tr, unsigned int letter, int next_byte, char *ph_b
} // 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)
{//=========================================================================
@@ -596,15 +692,18 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
int letter;
int len;
int ix;
int c;
char *p2;
char *pbuf;
const char *modifier;
ALPHABET *alphabet;
int al_offset;
int al_flags;
int language;
int number;
int phontab_1;
int speak_letter_number;
char capital[20];
char capital[30];
char ph_buf[80];
char ph_buf2[80];
char ph_alphabet[80];
@@ -626,21 +725,61 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
if(control & 2)
{
// include CAPITAL information
if(iswupper(letter))
if(iswupper2(letter))
{
Lookup(tr, "_cap", capital);
}
}
letter = towlower2(letter);

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)
{
strcpy(phonemes,ph_buf);
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_flags = 0;
if((alphabet = AlphabetFromChar(letter)) != NULL)
@@ -766,7 +905,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
speak_letter_number = 1;
if(!(al_flags & AL_NO_SYMBOL))
{
if(iswalpha(letter))
if(iswalpha2(letter))
Lookup(translator, "_?A", ph_buf);

if((ph_buf[0]==0) && !iswspace(letter))
@@ -784,8 +923,8 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
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)
{
@@ -2216,8 +2355,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
if((tr->langopts.numbers & NUM_NOPAUSE) && (next_char == ' '))
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.
}


+ 194
- 59
src/readclause.cpp View File

@@ -76,6 +76,8 @@ static int ssml_ignore_l_angle = 0;

// punctuations symbols that can end a clause
static const unsigned short punct_chars[] = {',','.','?','!',':',';',
0x00a1, // inverted exclamation
0x00bf, // inverted question
0x2013, // en-dash
0x2014, // em-dash
0x2026, // elipsis
@@ -124,6 +126,8 @@ static const unsigned short punct_chars[] = {',','.','?','!',':',';',
// 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,
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, // em-dash
CLAUSE_SEMICOLON | PUNCT_SAY_NAME | 0x8000, // elipsis
@@ -214,50 +218,91 @@ const int param_defaults[N_SPEECH_PARAM] = {
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
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)
int iswalpha(int c)
{
if(c < 0x100)
if(c < 0x80)
return(isalpha(c));
if((c > 0x3040) && (c <= 0xa700))
return(1); // japanese, chinese characters
if(c > MAX_WALPHA)
return(0);
return(walpha_tab[c-0x100]);
return(walpha_tab[c-0x80]);
}

int iswdigit(int c)
{
if(c < 0x100)
if(c < 0x80)
return(isdigit(c));
return(0);
}
@@ -272,50 +317,67 @@ int iswalnum(int c)
int towlower(int c)
{
int x;
if(c < 0x100)
int ix;

if(c < 0x80)
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
}

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
}

int iswupper(int c)
{
int x;
if(c < 0x100)
if(c < 0x80)
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(1);
}

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

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

@@ -367,23 +429,96 @@ float wcstod(const wchar_t *str, wchar_t **tailptr)
}
#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 x;
int ix;

// check for non-standard upper to lower case conversions
if(c == 'I')
{
if(translator->translator_name == L('t','r'))
if(translator->langopts.dotless_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)
{//================================
@@ -2261,7 +2396,7 @@ f_input = f_in; // for GetC etc
c2 = ' ';
}
else
if((c2 == '/') || iswalpha(c2))
if((c2 == '/') || iswalpha2(c2))
{
// check for space in the output buffer for embedded commands produced by the SSML tag
if(ix > (n_buf - 20))
@@ -2444,10 +2579,10 @@ f_input = f_in; // for GetC etc
}
}

if(iswupper(c1))
if(iswupper2(c1))
{
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_buf2[30];
@@ -2464,7 +2599,7 @@ f_input = f_in; // for GetC etc
}
}
else
if(iswalpha(c1))
if(iswalpha2(c1))
tr->clause_lower_count++;

if(option_phoneme_input)
@@ -2533,8 +2668,8 @@ if(option_ssml) parag=1;

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);
ungot_char2 = c1;
@@ -2633,7 +2768,7 @@ if(option_ssml) parag=1;

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
c1 = CHAR_COMMA_BREAK;
@@ -2652,7 +2787,7 @@ if(option_ssml) parag=1;
}
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)
}
}
@@ -2661,7 +2796,7 @@ if(option_ssml) parag=1;
{
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
// c1 = ' ';

+ 14
- 7
src/speak.cpp View File

@@ -24,6 +24,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#ifndef PLATFORM_DOS
#ifdef PLATFORM_WINDOWS
@@ -101,7 +102,7 @@ static const char *help_text =
"\t Compile pronunciation rules and dictionary from the current\n"
"\t directory. <voice name> specifies the language\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"
"\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"
@@ -243,16 +244,22 @@ static int OpenWaveFile(const char *path, int rate)
if(path == NULL)
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
// prevent Windows adding 0x0d before 0x0a bytes
_setmode(_fileno(stdout), _O_BINARY);
_setmode(_fileno(stdout), _O_BINARY);
#endif
f_wave = stdout;
f_wave = stdout;
}
else
f_wave = fopen(path,"wb");
}
else
f_wave = fopen(path,"wb");

if(f_wave != NULL)
{
@@ -739,7 +746,7 @@ int main (int argc, char **argv)
{
value = -1;
sscanf(optarg2,"%d",&value);
if((value<0) || (value>2))
if((value<0) || (value>3))
{
fprintf(stderr,"Bad value for -ipa=\n");
value = 0;

+ 11
- 0
src/speak_lib.cpp View File

@@ -1164,6 +1164,17 @@ ESPEAK_API void espeak_SetPhonemeTrace(int value, FILE *stream)
} // 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)
{//=============================================================================
ENTER("espeak_CompileDictionary");

+ 62
- 29
src/speak_lib.h View File

@@ -55,6 +55,9 @@ Revision 7 24.Dec.2011
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.

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

*/
/********************/
/* Initialization */
@@ -94,7 +97,7 @@ typedef struct {
char string[8]; // used for phoneme names (UTF8). Terminated by a zero byte unless the name needs the full 8 bytes.
} id;
} 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.


@@ -102,16 +105,16 @@ typedef struct {

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."


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

** Block 1:
<audio data> +
<audio data> +
List of events: SENTENCE + WORD + LIST_TERMINATED
** Block 2:
<audio data> +
List of events: WORD + END + LIST_TERMINATED
@@ -148,11 +151,11 @@ typedef enum {

typedef enum {
/* 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 */
AUDIO_OUTPUT_RETRIEVAL,
/* SYNCHRONOUS mode: as RETRIEVAL but doesn't return until synthesis is completed */
AUDIO_OUTPUT_SYNCHRONOUS,

@@ -199,7 +202,7 @@ extern "C"
ESPEAK_API void espeak_SetSynthCallback(t_espeak_callback* SynthCallback);
/* Must be called before any synthesis functions are called.
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:
@@ -288,7 +291,7 @@ ESPEAK_API espeak_ERROR espeak_Synth(const void *text,
start of the text.

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
of zero indicates no end position.
@@ -299,6 +302,7 @@ ESPEAK_API espeak_ERROR espeak_Synth(const void *text,
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.

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

@@ -307,13 +311,13 @@ ESPEAK_API espeak_ERROR espeak_Synth(const void *text,
espeakENDPAUSE If set then a sentence pause is added at the end of the text. If not set then
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.

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.
EE_INTERNAL_ERROR.
*/
@@ -336,8 +340,8 @@ ESPEAK_API espeak_ERROR espeak_Synth_Mark(const void *text,

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.
EE_INTERNAL_ERROR.
*/
@@ -350,8 +354,8 @@ ESPEAK_API espeak_ERROR espeak_Key(const char *key_name);
If key_name is a single character, it speaks the name of the character.
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.
EE_INTERNAL_ERROR.
*/
@@ -360,10 +364,10 @@ ESPEAK_API espeak_ERROR espeak_Key(const char *key_name);
extern "C"
#endif
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.
EE_INTERNAL_ERROR.
*/
@@ -420,7 +424,7 @@ ESPEAK_API espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int valu
espeakRANGE: pitch range, range 0-100. 0-monotone, 50=normal

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.

espeakCAPITALS: announce capital letters by:
@@ -432,8 +436,8 @@ ESPEAK_API espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int valu

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.
EE_INTERNAL_ERROR.
*/
@@ -455,8 +459,8 @@ ESPEAK_API espeak_ERROR espeak_SetPunctuationList(const wchar_t *punctlist);

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.
EE_INTERNAL_ERROR.
*/
@@ -474,6 +478,35 @@ ESPEAK_API void espeak_SetPhonemeTrace(int value, FILE *stream);
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
extern "C"
#endif
@@ -501,7 +534,7 @@ typedef struct {
unsigned char gender; // 0=none 1=male, 2=female,
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 xx1; // for internal use
unsigned char xx1; // for internal use
int score; // for internal use
void *spare; // for internal use
} espeak_VOICE;
@@ -546,8 +579,8 @@ ESPEAK_API espeak_ERROR espeak_SetVoiceByName(const char *name);
/* Searches for a voice with a matching "name" field. Language is not considered.
"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.
EE_INTERNAL_ERROR.
*/
@@ -588,7 +621,7 @@ ESPEAK_API espeak_ERROR espeak_Cancel(void);
function returns, the audio output is fully stopped and the synthesizer is ready to
synthesize a new message.

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

@@ -605,7 +638,7 @@ extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_Synchronize(void);
/* This function returns when all data have been spoken.
Return: EE_OK: operation achieved
Return: EE_OK: operation achieved
EE_INTERNAL_ERROR.
*/

@@ -614,7 +647,7 @@ extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_Terminate(void);
/* last function to be called.
Return: EE_OK: operation achieved
Return: EE_OK: operation achieved
EE_INTERNAL_ERROR.
*/


+ 1
- 1
src/synthdata.cpp View File

@@ -35,7 +35,7 @@
#include "translate.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;

int option_device_number = -1;

+ 3
- 9
src/synthesize.cpp View File

@@ -1953,20 +1953,14 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control)

if((option_phonemes > 0) || (phoneme_callback != NULL))
{
int use_ipa = 0;
int phoneme_mode = 0;
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)
{
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)
{

+ 5
- 5
src/synthesize.h View File

@@ -192,23 +192,23 @@ typedef struct {

// a clause translated into phoneme codes (first stage)
typedef struct {
unsigned short synthflags; // NOTE Put shorts on 32bit boundaries, because of RISC OS compiler bug?
unsigned char phcode;
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 char wordstress; // the highest level stress in this word
unsigned char tone_ph; // tone phoneme to use with this vowel
} PHONEME_LIST2;


typedef struct {
// The first section is a copy of PHONEME_LIST2
unsigned short synthflags;
unsigned char phcode;
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 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;
short length; // length_mod

+ 4
- 1
src/tr_languages.cpp View File

@@ -844,6 +844,7 @@ Translator *SelectTranslator(const char *name)
tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.numbers = 1;
tr->langopts.accents = 2; // 'capital' after letter name
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 3; // don't count apostrophe
}
break;

@@ -971,7 +972,7 @@ SetLengthMods(tr,3); // all equal
SetLetterBits(tr,LETTERGP_VOWEL2,hy_vowels);
SetLetterBits(tr,LETTERGP_C,hy_consonants);
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
}
break;
@@ -1289,6 +1290,7 @@ SetLengthMods(tr,3); // all equal
ResetLetterBits(tr,0x2);
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.accents = 2; // 'capital' after letter name
}
break;

@@ -1520,6 +1522,7 @@ SetLengthMods(tr,3); // all equal

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.dotless_i = 1;
tr->langopts.param[LOPT_SUFFIX] = 1;

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

+ 20
- 17
src/translate.cpp View File

@@ -388,9 +388,12 @@ int IsAlpha(unsigned int c)
0
};

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

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

if((c >= 0x901) && (c <= 0xdf7))
{
// Indic scripts: Devanagari, Tamil, etc
@@ -625,7 +628,7 @@ int IsAllUpper(const char *word)
while((*word != 0) && !isspace2(*word))
{
word += utf8_in(&c, word);
if(!iswupper(c))
if(!iswupper2(c))
return(0);
}
return(1);
@@ -1054,7 +1057,7 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt
}
}

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))
{
@@ -1633,7 +1636,7 @@ if(end_type & SUFX_UNPRON)
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 !!!!
// any single letter before a dot is an abbreviation, except 'I'
@@ -1909,7 +1912,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
while(*p2 != ' ') p2++;

utf8_in(&c_word2, p2+1); // first character of the next word;
if(!iswalpha(c_word2))
if(!iswalpha2(c_word2))
{
ok =0;
}
@@ -2377,9 +2380,9 @@ static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in,

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

@@ -2393,7 +2396,7 @@ static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in,
new_c = replace_chars[ix+1];
break;
}
if((word >> 16) == (unsigned int)towlower(next_in))
if((word >> 16) == (unsigned int)towlower2(next_in))
{
new_c = replace_chars[ix+1];
ignore_next = 1;
@@ -2410,14 +2413,14 @@ static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in,
// 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
c2 = new_c >> 16;
if(upper_case && iswupper(next_in))
c2 = towupper(c2);
if(upper_case && iswupper2(next_in))
c2 = towupper2(c2);
*insert = c2;
new_c &= 0xffff;
}

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

*wordflags |= FLAG_CHAR_REPLACED;
return(new_c);
@@ -2481,7 +2484,7 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c,
// look for 'n and replace by a special character (unicode: schwa)


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

@@ -2911,7 +2914,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
}
else
{
if(iswupper(c))
if(iswupper2(c))
word_flags |= FLAG_FIRST_UPPER;

if((prev_out == ' ') && iswdigit(sbuf[ix-2]) && !iswdigit(prev_in))
@@ -2940,7 +2943,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
}
}

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

@@ -2955,13 +2958,13 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
}
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
if(UpperCaseInWord(tr, &sbuf[ix], c) == 1)
{
// convert to lower case and continue
c = towlower(c);
c = towlower2(c);
}
else
{
@@ -2971,7 +2974,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
// 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;
utf8_in(&next2_in,&source[source_index + next_in_nbytes]);

+ 9
- 3
src/translate.h View File

@@ -81,8 +81,9 @@
#define FLAG_ONLY 0x4000
#define FLAG_ONLY_S 0x8000
#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_NATIVE 0x80000 // not if we've switched translators
#define FLAG_LOOKUP_SYMBOL 0x40000000 // to indicate called from Lookup()

#define BITNUM_FLAG_ALLCAPS 0x2a
@@ -247,9 +248,9 @@ typedef struct {
typedef struct{
unsigned int flags;
unsigned short start;
unsigned short sourceix;
unsigned char pre_pause;
unsigned char wmark;
unsigned short sourceix;
unsigned char length;
} WORD_TAB;

@@ -542,6 +543,7 @@ typedef struct {
char tone_numbers;
char ideographs; // treat as separate words
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 listx; // compile *_listx after *list
const unsigned int *replace_chars; // characters to be substitutes
@@ -713,9 +715,13 @@ int IsDigit(unsigned int c);
int IsDigit09(unsigned int c);
int IsAlpha(unsigned int c);
int IsVowel(Translator *tr, int c);
int iswalpha2(int c);
int isspace2(unsigned int c);
int iswlower2(int c);
int iswupper2(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);
ALPHABET *AlphabetFromChar(int c);
ALPHABET *AlphabetFromName(const char *name);

+ 1
- 1
src/transldlg.cpp View File

@@ -460,7 +460,7 @@ void TranslDlg::OnCommand(wxCommandEvent& event)
t_phonetic->SetDefaultStyle(style_phonetic_large);

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

case T_PROCESS:

+ 1
- 0
src/voice.h View File

@@ -21,6 +21,7 @@

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

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

+ 8
- 5
src/voices.cpp View File

@@ -422,7 +422,7 @@ void VoiceReset(int tone_only)
voice->n_harmonic_peaks = 5;
voice->peak_shape = 0;
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->samplerate = samplerate_native;
memset(voice->klattv,0,sizeof(voice->klattv));
@@ -540,7 +540,7 @@ static unsigned int StringToWord2(const char *string)
int c;
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);
}
@@ -602,7 +602,7 @@ voice_t *LoadVoice(const char *vname, int control)

// which directory to look for a named voice. List of voice names, must end in a space.
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 =
"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 ";

@@ -751,6 +751,7 @@ voice_t *LoadVoice(const char *vname, int control)

new_translator = SelectTranslator(translator_name);
langopts = &new_translator->langopts;
strncpy0(voice->language_name, language_name, sizeof(voice->language_name));
}
}
break;
@@ -1829,6 +1830,7 @@ espeak_ERROR SetVoiceByName(const char *name)
}

DoVoiceChange(voice);
voice_selector.languages = voice->language_name;
SetVoiceStack(&voice_selector, variant_name);
return(EE_OK);
}
@@ -1845,6 +1847,7 @@ espeak_ERROR SetVoiceByName(const char *name)
LoadVoice(variant_name,2);
}
DoVoiceChange(voice);
voice_selector.languages = voice->language_name;
SetVoiceStack(&voice_selector, variant_name);
return(EE_OK);
}
@@ -1895,8 +1898,8 @@ void FreeVoiceList()
ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec)
{//========================================================================
char path_voices[sizeof(path_home)+12];
#ifdef PLATFORM_RISCOS
if(n_voices_list == 0)
{

Loading…
Cancel
Save