Browse Source

Merge branch 'master' into android

master
Reece H. Dunn 12 years ago
parent
commit
7d63680378
67 changed files with 2387 additions and 2099 deletions
  1. 144
    4
      dictsource/an_list
  2. 114
    97
      dictsource/an_rules
  3. 9
    5
      dictsource/bg_list
  4. 35
    38
      dictsource/da_list
  5. 292
    274
      dictsource/da_rules
  6. 1
    0
      dictsource/en_list
  7. 3
    1
      dictsource/en_rules
  8. 1545
    1545
      dictsource/fr_rules
  9. 2
    7
      dictsource/hi_list
  10. 1
    1
      dictsource/hi_rules
  11. 1
    1
      dictsource/kn_list
  12. 1
    1
      dictsource/ml_list
  13. 17
    4
      dictsource/pt_list
  14. 27
    10
      dictsource/pt_rules
  15. 4
    4
      dictsource/ta_list
  16. 25
    0
      dictsource/ta_rules
  17. 1
    1
      dictsource/te_list
  18. 4
    4
      dictsource/vi_rules
  19. 5
    6
      docs/phonemes.html
  20. 0
    0
      espeak-data/voices/europe/an
  21. BIN
      phsource/klatt/nr
  22. 53
    62
      phsource/ph_danish
  23. 3
    0
      phsource/ph_english
  24. 2
    4
      phsource/ph_hindi
  25. BIN
      phsource/r/V_
  26. BIN
      phsource/r/V_2_
  27. BIN
      phsource/vnasal/&_n
  28. BIN
      phsource/vnasal/&u_n
  29. BIN
      phsource/vnasal/V_n
  30. BIN
      phsource/vnasal/W_n
  31. BIN
      phsource/vnasal/a#_n
  32. BIN
      phsource/vnasal/a#_n2
  33. BIN
      phsource/vnasal/a#u_n
  34. BIN
      phsource/vnasal/aa_n
  35. BIN
      phsource/vnasal/aa_n2
  36. BIN
      phsource/vnasal/aa_n3
  37. BIN
      phsource/vnasal/aa_n4
  38. BIN
      phsource/vnasal/e#_n
  39. BIN
      phsource/vnasal/e_n
  40. BIN
      phsource/vnasal/ee_n
  41. BIN
      phsource/vnasal/ee_n2
  42. BIN
      phsource/vnasal/ee_u_n
  43. BIN
      phsource/vnasal/i_n
  44. BIN
      phsource/vnasal/i_n2
  45. BIN
      phsource/vnasal/ii_n
  46. BIN
      phsource/vnasal/o_n
  47. BIN
      phsource/vnasal/o_n2
  48. BIN
      phsource/vnasal/o_n3
  49. BIN
      phsource/vnasal/o_n4
  50. BIN
      phsource/vnasal/oi_n
  51. BIN
      phsource/vnasal/oo_n
  52. BIN
      phsource/vnasal/oo_n2
  53. BIN
      phsource/vnasal/oo_n3
  54. BIN
      phsource/vnasal/u_n
  55. BIN
      phsource/vnasal/vowelchart.png
  56. 1
    0
      platforms/windows/windows_cmd/src/speech.h
  57. 1
    0
      platforms/windows/windows_dll/src/speech.h
  58. 1
    0
      platforms/windows/windows_sapi/src/speech.h
  59. 23
    5
      src/compiledata.cpp
  60. 2
    2
      src/dictionary.cpp
  61. 2
    2
      src/menus.cpp
  62. 46
    12
      src/phonemelist.cpp
  63. 1
    1
      src/synthdata.cpp
  64. 1
    1
      src/synthesize.cpp
  65. 7
    3
      src/tr_languages.cpp
  66. 12
    3
      src/translate.cpp
  67. 1
    1
      src/voices.cpp

+ 144
- 4
dictsource/an_list View File

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


// letters

_cap m'aJ^uskla // should be after the letter
_?? simb'Olo
_#32 Esp'aTjo


// accent names
_lig liQaD'ura
_acu akT'ento aQ'uDo
_ac2 d'Ople||aQ'uDo
_brv br'eu
_ced TeD'il^a
_cir Tirkumfl'ekso
_dia djEr'esi
_dac d'Ople||aQ'uDo
_dot p'unto
_grv gr'iEu
_hac kar'On
_mcn makr'On
_ogo kod'eta
_rng an'iel^o
_stk b'aRR2a // ??
_tld t'il^a




// letter names // letter names
y i $u // word 'and' y i $u // word 'and'
_y je _y je
y je $atend y je $atend
ch tSe
ll 'El^e
á 'a||akTEntw'aDa
é 'e||akTEntw'aDa
í 'i||akTEntw'aDa
_ó 'o||akTEntw'aDa
ú 'u||akTEntw'aDa
ü ,uDjEr'Esi




// numbers // numbers
_3X tr'enta _3X tr'enta
_4X kwar'anta _4X kwar'anta
_5X Tinkw'anta _5X Tinkw'anta
_6X siks'anta
_6X siS'anta
_7X set'anta _7X set'anta
_8X gwit'anta _8X gwit'anta
_9X noB'anta _9X noB'anta
_8C gwitoTj'Entos _8C gwitoTj'Entos
_9C nowTj'Entos _9C nowTj'Entos
_0M1 m'il _0M1 m'il
_1M1 m'il
_0M2 mil^'ons _0M2 mil^'ons
_1M2 un||mil^'on _1M2 un||mil^'on
_0M4 bil^'ons _0M4 bil^'ons
_1M4 un||bil^'on _1M4 un||bil^'on


_0and i
_0and %i
_dpt kon _dpt kon




// ordinal numbers
_#º o
_#ª a
//_ord eno

_1ox prim'Er
_2ox seQ'und
_3ox tErT'Er

_1o un'en
_2o dos'en
_3o tres'en
_4o kwatr'en
_5o Tink'en
_6o seIs'en
_7o sEt'en
_8o gwit'en
_9o nU'en
_11o onT'en
_12o DoT'en
_13o tReT'en
_14o katorT'en
_15o kinT'en
_16o sET'en
_10o DET'en
_20o Bint'en
_30o trent'en
_40o kwarant'en
_50o Tinkwant'en
_60o siSant'en
_70o sEtant'en
_80o gwitant'en
_90o noBant'en

_1Xo DeTi
_2Xo Binti
_3Xo trentaI
_4Xo kwarantaI
_5Xo TinkwantaI
_6Xo siSantaI
_7Xo sEtantaI
_8Xo gwitantaI
_9Xo noBantaI
_1Co TEnt'en
_2Co dosTEnt'en
_3Co tresTEnt'en
_4Co kw,atroTEnt'en
_5Co T,inkoTEnt'en
_6Co seIsTEnt'en
_7Co sjEtTEnt'en
_8Co gw,eItoTEnt'en
_9Co nweUTEnt'en

_0M1o mil'en
_1M1 mil'en
_0M2o mil^on'en
_1M2o mil^on'en


// unstressed words // unstressed words
o $u
o $atend
a $u
a $atend
os $u
os $atend
as $u
as $atend

lo $u lo $u
la $u la $u
los $u los $u
te $u te $u
se $u se $u
le $u le $u
les $u
li $u
nos $u
mos $u
tos $u
vos $u
os $u
les $u
lis $u

// exceptions
holio x'olio
jazz dZ'as


// 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
(i phone) 'aIfon
iphone 'aIfon
(i pod) 'aIpod
ipod 'aIpod
hardware x'ardwer
live l'aIB
messenger m'esendZer
mozilla moT'ila
nvda ene|be|de|'a
office 'ofis
skype esk'aIp
software s'oftwer
thunderbird Tanderb'ird
twitter tw'iter
whatsapp was'app
windows w'indows

+ 114
- 97
dictsource/an_rules View File

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



.L01 l r y .L01 l r y
.L03 f h j s y z r // allow [B] [D] [Q] before these consonants .L03 f h j s y z r // allow [B] [D] [Q] before these consonants
.L04 b v f p // labials, nasals are [m] .L04 b v f p // labials, nasals are [m]




.group a .group a
a a
ai aI
ai (X 'aI
ay (K aI
ay (X 'aI
au aU
au (X 'aU
a a
aix aS
ai aI
ai (X 'aI
ay (K aI
ay (X 'aI
au aU
au (X 'aU




.group b .group b
b b b b
_) b b // phoneme definition may change it to [B]
_) b b // phoneme definition may change it to [B]
_) b (A b _) b (A b
b (A B b (A B
b (cY B b (cY B




.group c .group c
c k
c (Y T // ce ci
cc kT
ch tS
c k
c (Y T // ce ci
ck k // Forano (Foreign)
ch tS




.group d .group d
d d d d
_) d d // phoneme definition may change it to [D]
_) d d // phoneme definition may change it to [D]
_) d (A d _) d (A d
d (A D d (A D
d (cY D d (cY D
l) d d l) d d
r) d d r) d d


n) d (_ = // silent, but stress on last vowel
n) d (_ = // silent, but stress on last vowel




.group e .group e
e e
ei eI
ei (X 'eI
ey (K eI
ey (X 'eI
eu eU
eu (X 'eU
i) e E
u) e E
y) e E
e e
eix eS
ei eI
ei (X 'eI
ey (K eI
ey (X 'eI
eu eU
eu (X 'eU
i) e E
u) e E
y) e E




.group f .group f
f f
f f




.group g .group g
g g g g
_) g g // phoneme definition may change it to [Q]
_) gh (A g // allow _gh in foreign words
gü gw
_) gh (A g // allow _gh in foreign words
_) gn (A n _) gn (A n
_) g (A g
g (A Q g (A Q
g (cY Q g (cY Q
g (L03 Q g (L03 Q
m) g g m) g g
n) g g n) g g
g (Y+ x // ge gi
gu (A gw
gü gw
gu (e g
gu (i g
g (Y+ x // ge gi
gu (A gw
gu (e g
gu (i g
gu (é g
gu (í g




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




.group i .group i
i i
i (A j
A) ix S
_) ix iS
i i
i (u i
i (A j




.group j .group j
j x
j x




.group k .group k
k k
k k


.group l .group l
l l
ll l^
l l
ll l^
ll (_ l




.group m .group m
m m
m m




.group n .group n
n n
n (L04 m
n (_L04 m
ny n^
n n
n (L04 m
n (_L04 m
ny n^




.group ñ .group ñ
ñ n^
ñ n^




.group o .group o
o o
oi oI
oi (X 'oI
oy (K oI
oy (X 'oI
ou ow
ou (X 'ow
i) o O
u) o O
y) o O
o o
oix oS
oi oI
oi (X 'oI
oy (K oI
oy (X 'oI
ou ow
ou (X 'ow
i) o O
u) o O
y) o O


.group p .group p
p p
p p
_) ps s




.group q .group q
qu (A kw
qü kw
qu (e k
qu (i k

qu (A kw
qü kw
qu (e k
qu (i k
qu (é k
qu (í k


.group r .group r
r r
_) r R
rr RR2
@) r (- = // followed by hyphen. Silent, but stress on last vowel
rs (_ =s

r r
r (_ r
r (t r
A) r (A r
C) r (A r
_) r (A R
l) r (A R
m) r (A R
n) r (A R
s) r (A R
rr RR2
@) r (- = // followed by hyphen. Silent, but stress on last vowel
rs (_ =s




.group s .group s
s s
&) s (_S1 s
s s
&) s (_S1 s




.group t .group t
t t
a) t (_ t# // becomes silent in a stressed syllable
u) t (_ t#
ei) t (_ t#
n) t (_ = // silent, but stress on last vowel
tz T
t t
a) t (_ t# // becomes silent in a stressed syllable
u) t (_ t#
ei) t (_ t#
n) t (_ = // silent, but stress on last vowel
tz T
ue) t (_ t#
ui) t (_ t#
s) t (_ = // silent, but stress on last vowel




.group u .group u
u u
u (A w
_) u (A gw
u u
u (u u
u (i u
u (A w
_) u (A gw
uix uS





.group v // same as 'b' .group v // same as 'b'
v b v b
_) v b // phoneme definition may change it to [B]
_) v b // phoneme definition may change it to [B]
_) v (A b _) v (A b
v (A B v (A B
v (cY B v (cY B




.group w .group w
w w
w B




.group x .group x
x ks
_) x S
x ks
_) x S
i) x S


.group y .group y
y j
y j
y (_ i


.group z .group z
z T
z T




.group .group
á ''a
é ''e
í ''i
ó ''o
ú ''u
á ''a
é ''e
í ''i
ó ''o
ú ''u



+ 9
- 5
dictsource/bg_list View File



// words of one letter // words of one letter
в $combine в $combine
а $u $combine
а $u $combine
е $u е $u
й i $u
й i $u
и $u $pause и $u $pause
у $u $combine
с $combine
г god'ina $hasdot
у $u $combine
с $combine
г god'ina $hasdot

(а в) %av
(а с) %as



// letter names // letter names
б b@ б b@

+ 35
- 38
dictsource/da_list View File

¢ s'ent ¢ s'ent
¥ j'en: ¥ j'en:
µ my µ my
' apostr'Vf // PB o changed to V
' apostr'Vf
½ en'hal ½ en'hal
+ plus + plus
_10 t'i _10 t'i
_11 'Elv@ _11 'Elv@
_12 t'Vl _12 t'Vl
_13 tR'?&#d@-n // PB & changed to &#
_13 tR'?&#d@-n
_14 fj'ord@-n _14 fj'ord@-n
_15 f'Emd@-n _15 f'Emd@-n
_16 s'ajsd@-n _16 s'ajsd@-n
_17 s'Wd@-n // PP Y changed to W
_18 '?&d@-n // PB a changed to &
_17 s'Wd@-n
_18 '?&d@-n
_19 n'ed@-n _19 n'ed@-n
_2X t'y:?u _2X t'y:?u
_3X tR'&#Dv@ //PB [tR'ADv@] changed to [tR'&#Dv@]
_4X f'?W:_|V //PB [f'W:*3] changed to [ f'?W:V]
_5X h&l't*Es // PB [a] changed to [&], e changed to E
_6X t*'Es // PB changed from e to E
_7X h&lfj'&rs // PV a changed to &
_3X tR'&#Dv@
_4X f'?W:_|V
_5X h&l't*Es
_6X t*'Es
_7X h&lfj'&rs
_8X f'irs _8X f'irs
_9X h&lf'Ems // PB a changed to & _9X h&lf'Ems // PB a changed to &
_0C h'un*VD
_1C ed||h'unRV:D // PB added 'et hundrede'
_0M1 t'u:s@-n
_1M1 ed||t'u:s@-n // PB added 'et' to tusind
_0C h'unRVD
_1C ed||h'unRV:D
_0M1 t'?us@-n
_1M1 ed||t'?us@-n
_1M2 'e:n||milij'o:n _1M2 'e:n||milij'o:n
_0M2 milij'o:nV // PB [3] changed to [V]
_0M2 milij'o:nV
_1M3 'e:n||milij'A:d _1M3 'e:n||milij'A:d
_0M3 milij'A:d3 _0M3 milij'A:d3
_1M4 'e:n||bilij'o:n _1M4 'e:n||bilij'o:n
eller // or eller // or
mens $pause // while mens $pause // while
for for
fordi fVd'i $pause // because - PB: changed stress
fordi fVd'i $pause // because
når nVr $pause // while når nVr $pause // while
der dEr $u+ $u // PB changed from [dA] der dEr $u+ $u // PB changed from [dA]
hvor v'O // where hvor v'O // where
ved $u+ // at ved $u+ // at
om $u+ $brk // about, within om $u+ $brk // about, within
med $u+ // with med $u+ // with
af & // PB changed from [a?] to [&] - sound too short in a sentence
// Also removed $u from 'af' and other words. They disappeared.
ad & // PB added 'ad'
ad &D $atend $sentence // PB "Det må ikke skille os ad."
at & $u // PB changed from [at] to [&:]
hos // at - PB: removed [$u+]
som sVm $u // which / that - PB: removed [$u+]
af &
ad &
ad &D $atend $sentence // "Det må ikke skille os ad."
at & $u
hos
som sVm $u // which / that


// pronouns // pronouns
jeg jaj $u+ // I
jeg jAj $u+ // I
du du $u du du $u
de $u de $u
han $u han $u
dét de dét de
vi vi $u vi vi $u
i _i $u+ i _i $u+
mig maj $u // me
dig daj $u+
mig mAj $u // me
dig dAj $u+
dem $u dem $u
ham $u ham $u
hende $u hende $u
er Er $u // is/are er Er $u // is/are
var vAr $u+ // was/were var vAr $u+ // was/were
har hAr $u+ // has/have har hAr $u+ // has/have
havde h&:D@ $u+ // had
havde h&D@ $u+ // had
vil $u+ // will vil $u+ // will
skal $u+ // shall skal $u+ // shall
kan $u+ // can kan $u+ // can
word _^_EN word _^_EN
warrior _^_EN warrior _^_EN


// PB names
// Names
august OgOsd $capital august OgOsd $capital
austin _^_EN austin _^_EN
bailey _^_EN bailey _^_EN
reynolds _^_EN reynolds _^_EN
white _^_EN white _^_EN


// PB French words
// French words
croquis _^_FR croquis _^_FR
crouton _^_FR crouton _^_FR
jugement _^_FR jugement _^_FR
madame _^_FR madame _^_FR
mademoiselle _^_FR mademoiselle _^_FR


// PB (French) nouns with final -age - stressed a, "age" pronounced ['&S@]
// French) nouns with final -age - stressed a, "age" pronounced ['&S@]
affutage $alt affutage $alt
apanage $alt apanage $alt
arbitrage $alt arbitrage $alt
tonnage $alt tonnage $alt
trikotage $alt trikotage $alt


// PB final -abel - stressed a
// Final -abel - stressed a
// "el" has been removed in order to make rules for // "el" has been removed in order to make rules for
// "konstabel" and the plural "konstabler" without "e" // "konstabel" and the plural "konstabler" without "e"
acceptab $alt acceptab $alt
tolerans $alt tolerans $alt
varians $alt varians $alt


// PB nouns with final -ade - stressed a
// Nouns with final -ade - stressed a
ambassade $alt ambassade $alt
arkade $alt arkade $alt
ballade $alt ballade $alt
tirade $alt tirade $alt
triade $alt triade $alt


// PB nouns and adjectives with final -al - stressed a
// Nouns and adjectives with final -al - stressed a
admiral $alt admiral $alt
adverbial $alt adverbial $alt
aksial $alt aksial $alt
ækvatorial $alt ækvatorial $alt
ødipal $alt ødipal $alt


// PB words with final -ar - stressed a
// Words with final -ar - stressed a
dokumentar $alt dokumentar $alt
aktuar $alt aktuar $alt
proletar $alt proletar $alt
velar $alt velar $alt
vokabular $alt vokabular $alt


// PB final -agtig - stressed a
// Final -agtig - stressed a
barnagtig $alt barnagtig $alt
blødagtig $alt blødagtig $alt
delagtig $alt delagtig $alt
tvivlagtig $alt tvivlagtig $alt
tyvagtig $alt tyvagtig $alt


// PB words with final -an - stressed a
// Words with final -an - stressed a
aeroplan $alt2 aeroplan $alt2
agraman $alt2 agraman $alt2
altan $alt2 altan $alt2
galan $alt2 galan $alt2
hortulan $alt2 hortulan $alt2
human $alt2 human $alt2
hvordan vVd'&n $alt
inhuman $alt2 inhuman $alt2
kapellan $alt2 kapellan $alt2
karljohan $alt2 karljohan $alt2
adviser $alt adviser $alt
advoker $alt advoker $alt
afficer $alt afficer $alt
'aflever $alt
'afmarcher $alt 'afmarcher $alt
afrikaniser $alt afrikaniser $alt
agere $alt agere $alt
(secret service) sigred||s'Wvis (secret service) sigred||s'Wvis
(happy hour) h&pi||'AuV (happy hour) h&pi||'AuV
chevrolet sjEvrol'e chevrolet sjEvrol'e
saigon sajg3-n // PB Saigon
saigon sAjgVn // PB Saigon
managua m&n'&:gw& managua m&n'&:gw&
(deja-vu) deSja||'vy (deja-vu) deSja||'vy
(il duce) il||d'u:tSj@ // PB Italian Fascist (il duce) il||d'u:tSj@ // PB Italian Fascist

+ 292
- 274
dictsource/da_rules
File diff suppressed because it is too large
View File


+ 1
- 0
dictsource/en_list View File

Andre 0ndreI Andre 0ndreI
Andrea andri@ Andrea andri@
Andreas A:ndr'eI@s Andreas A:ndr'eI@s
Angela $1
Anita $alt3 Anita $alt3
Anthony ant@ni Anthony ant@ni
Anton ant0n Anton ant0n

+ 3
- 1
dictsource/en_rules View File

o (blo 0 o (blo 0
_r) o (bo oU _r) o (bo oU
_) o (bs %0 _) o (bs %0
?3 _) o (bs %0#
_) obs (er %0bz _) obs (er %0bz
obso (l 0bs@ obso (l 0bs@
o (bstin 0 o (bstin 0
_) o (bt %0 _) o (bt %0
?3 _) o (bt %0#
o (by_ oU o (by_ oU
f) o (cA oU f) o (cA oU
_l) o (cA oU _l) o (cA oU
_) zs (Y z _) zs (Y z
_) z (wY z _) z (wY z


n) z (_ ts
n) z (_N ts
@) zales (_ z'A:l@s @) zales (_ z'A:l@s
zei zaI zei zaI
zes (_ zI2z zes (_ zI2z

+ 1545
- 1545
dictsource/fr_rules
File diff suppressed because it is too large
View File


+ 2
- 7
dictsource/hi_list View File

श S@ श S@
ष s.@ // retroflex [S] ष s.@ // retroflex [S]
स s@ स s@
ह H@
ह H@-
क़ q@ क़ q@
ख़ x@ ख़ x@
ग़ Q@ ग़ Q@
ॐ #X1o~m ॐ #X1o~m


_?? Vks.@r _?? Vks.@r
_a ej
_b bi:
_c si:
_d di:
_e i:
_f Ef



// Punctuation // Punctuation
। dVn.d.V । dVn.d.V

+ 1
- 1
dictsource/hi_rules View File

स (B s स (B s


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





+ 1
- 1
dictsource/kn_list View File

q kju: q kju:
r a:r r a:r
s Es s Es
t thi:
t t#i:
u ju: u ju:
v vi: v vi:
w dabalju: w dabalju:

+ 1
- 1
dictsource/ml_list View File

q kju: q kju:
r a:R r a:R
s Es s Es
t ti:
t t#i:
u ju: u ju:
v vi: v vi:
w dVbVlju: w dVbVlju:

+ 17
- 4
dictsource/pt_list View File

assembleia $alt assembleia $alt
ateia $alt ateia $alt
aterro $alt2 $noun aterro $alt2 $noun
aterros $alt2
atmosfera $alt atmosfera $alt
atrozes $alt atrozes $alt
autora $alt2 autora $alt2
chupeta $alt2 chupeta $alt2
clamores $alt2 clamores $alt2
clero $alt clero $alt
crepe $alt
coco $alt2 coco $alt2
cofre $alt cofre $alt
cogumelo $alt cogumelo $alt
concerto $alt2 $noun concerto $alt2 $noun
concordo $alt concordo $alt
conforto $alt $verb conforto $alt $verb
congelo $alt
consolo $alt2 $noun consolo $alt2 $noun
controle $alt2 $noun controle $alt2 $noun
controlo $alt2 $noun controlo $alt2 $noun
desespero $alt2 $noun desespero $alt2 $noun
desfecho $alt2 desfecho $alt2
desprezo $alt2 $noun desprezo $alt2 $noun
desse $alt2
desse $alt $verb
deste $alt2
deste $alt $verb
desterro $alt2
deveras $alt deveras $alt
dez $alt dez $alt
diarreia $alt diarreia $alt
discordo $alt discordo $alt
dissermos $alt
dobro $alt2 $noun dobro $alt2 $noun
doce $alt2 doce $alt2
doutora $alt2 doutora $alt2
esboço $alt $verb esboço $alt $verb
escopeta $alt2 escopeta $alt2
escova $alt2 $noun escova $alt2 $noun
escovo $alt
escroto $alt2 escroto $alt2
esforço $alt $verb esforço $alt $verb
esforços $alt esforços $alt
fogos $alt fogos $alt
foguete $alt2 foguete $alt2
foice $alt2 foice $alt2
fora $alt
fora $alt2 $verb
forca $alt2 forca $alt2
força $alt2 $noun força $alt2 $noun
forças $alt2 forças $alt2
forço $alt forço $alt
fordes $alt2
fores $alt2
fossem $alt2
forro $alt $verb forro $alt $verb
fosse $alt2 fosse $alt2
frevo $alt2 frevo $alt2
hoje $alt2 hoje $alt2
horrores $alt2 horrores $alt2
ideia $alt ideia $alt
insonoro $alt
interesse $alt2 $noun interesse $alt2 $noun
jogo $alt2 $noun jogo $alt2 $noun
joguete $alt2 joguete $alt2
provo $alt provo $alt
quarteto $alt2 quarteto $alt2
queda $alt queda $alt
quede $alt2
quinteto $alt2 quinteto $alt2
recomeço $alt2 $noun recomeço $alt2 $noun
recordo $alt recordo $alt
rock $alt rock $alt
rola $alt2 $noun rola $alt2 $noun
rolo $alt2 $noun rolo $alt2 $noun
rota $alt2
rota $alt $noun
rumores $alt2 rumores $alt2
saleta $alt2 saleta $alt2
sarjeta $alt sarjeta $alt
sexteto $alt2 sexteto $alt2
?1 senhora $alt2 ?1 senhora $alt2
senhores $alt2 senhores $alt2
singelo $alt
sinopse $alt sinopse $alt
soco $alt2 soco $alt2
soco $alt $verb soco $alt $verb
tumores $alt2 tumores $alt2
valeta $alt2 valeta $alt2
vanessa $alt2 vanessa $alt2
velo $alt
velozes $alt velozes $alt
verme $alt verme $alt
violeta $alt2 violeta $alt2

+ 27
- 10
dictsource/pt_rules View File

_perd) e (L05_ e _perd) e (L05_ e
_quis) e (L05_ E _quis) e (L05_ E
_soub) e (L05_ E _soub) e (L05_ E
proteg) e (L05_ e // des-
diss) e (L06_ E // contra-
tend) e (L06_ e // a- con- en- es- tend) e (L06_ e // a- con- en- es-
vend) e (L06_ e // re-
_mord) e (L06_ e _mord) e (L06_ e
_rend) e (L06_ e _rend) e (L06_ e
_vend) e (L06_ e
prend) e (L06_ e // a- rea- des- desa- prend) e (L06_ e // a- rea- des- desa-
_arrepend) e (L06_ e _arrepend) e (L06_ e
_defend) e (L06_ e _defend) e (L06_ e
preend) e (L06_ e // com- a- re- sur- preend) e (L06_ e // com- a- re- sur-
respond) e (L06_ e // cor- respond) e (L06_ e // cor-
bat) e (L07_ e // re- com- bat) e (L07_ e // re- com-
ceb) e (L07_ e // re- per- con-
ced) e (L07_ e // pro- con- su- ced) e (L07_ e // pro- con- su-
met) e (L07_ e // co- pro- arre- re- intro- compro- sub- met) e (L07_ e // co- pro- arre- re- intro- compro- sub-
mov) e (L07_ e // re- co- mov) e (L07_ e // re- co-
tend) e (L07_ e // en- con- a- es- tend) e (L07_ e // en- con- a- es-
torc) e (L07_ e // con- torc) e (L07_ e // con-
venc) e (L07_ e // con- venc) e (L07_ e // con-
vend) e (L07_ e // re-
vert) e (L07_ e // in- re- con- vert) e (L07_ e // in- re- con-
volv) e (L07_ e // de- en- re- volv) e (L07_ e // de- en- re-
_eleg) e (L07_ e _eleg) e (L07_ e
parec) e (L07_ e // a- rea- com- desa- parec) e (L07_ e // a- rea- com- desa-
prend) e (L07_ e // a- rea- des- prend) e (L07_ e // a- rea- des-
screv) e (L07_ e // e- in- ree- pre- de- screv) e (L07_ e // e- in- ree- pre- de-
_abastec) e (L07_ e
_aborrec) e (L07_ e _aborrec) e (L07_ e
_absolv) e (L07_ e _absolv) e (L07_ e
_adoec) e (L07_ e _adoec) e (L07_ e
_endurec) e (L07_ e _endurec) e (L07_ e
_enlouquec) e (L07_ e _enlouquec) e (L07_ e
_enraivec) e (L07_ e _enraivec) e (L07_ e
_entorpec) e (L07_ e
_entristec) e (L07_ e _entristec) e (L07_ e
_envaidec) e (L07_ e _envaidec) e (L07_ e
_envelhec) e (L07_ e _envelhec) e (L07_ e
_escurec) e (L07_ e _escurec) e (L07_ e
_espairec) e (L07_ e _espairec) e (L07_ e
_esquec) e (L07_ e _esquec) e (L07_ e
_estremec) e (L07_ e
_interromp) e (L07_ e _interromp) e (L07_ e
_perec) e (L07_ e _perec) e (L07_ e
_rejuvenec) e (L07_ e _rejuvenec) e (L07_ e
_resolv) e (L07_ e _resolv) e (L07_ e
_suspend) e (L07_ e _suspend) e (L07_ e
abastec) e (L07_ e // re-
conhec) e (L07_ e // & re- des- conhec) e (L07_ e // & re- des-
estabelec) e (L07_ e // re- estabelec) e (L07_ e // re-
favorec) e (L07_ e // des- favorec) e (L07_ e // des-
qu) e (brL04_ E qu) e (brL04_ E
_hosp) e (dL03_ E _hosp) e (dL03_ E
_gr) e (gL03_ e _gr) e (gL03_ e
_gal) e (gL03_ e
_n) e (grL03_ e _n) e (grL03_ e
_estr) ei (L03_ EI _estr) ei (L03_ EI
_inv) e (jL04_ E _inv) e (jL04_ E
_sev) e (rL03_ E _sev) e (rL03_ E
_reit) e (rL03_ E _reit) e (rL03_ E
_sinc) e (rL03_ E _sinc) e (rL03_ E
g) e (rL04_ E // su- refri-
_g) e (rL04_ E
qu) e (rL04_ E // re- qu) e (rL04_ E // re-
_op) e (rL04_ E _op) e (rL04_ E
gen) e (rL04_ E // de- re-
_alt) e (rL04_ E _alt) e (rL04_ E
_sug) e (rL04_ E
_sup) e (rL04_ E _sup) e (rL04_ E
_tol) e (rL04_ E _tol) e (rL04_ E
_ven) e (rL04_ E _ven) e (rL04_ E
acel) e (rL04_ E // des- acel) e (rL04_ E // des-
_coop) e (rL04_ E _coop) e (rL04_ E
_temp) e (rL04_ E _temp) e (rL04_ E
_recup) e (rL04_ E
_refrig) e (rL04_ E
_v) e (rbL03_ E _v) e (rbL03_ E
_p) e (rdL02_ E _p) e (rdL02_ E
_l) e (rdL03_ E _l) e (rdL03_ E
_d) e (vL03_ e _d) e (vL03_ e
scr) e (vL03_ e // e- in- pre- ree- de- scr) e (vL03_ e // e- in- pre- ree- de-
_atr) e (vL03_ e _atr) e (vL03_ e
pr) e (zL04_ E // des- menos-
_r) e (zL04_ E
_pr) e (zL04_ E
_despr) e (zL04_ E
_embel) e (zL04_ E _embel) e (zL04_ E
_acont) e (çL01_ e
_arref) e (çL01_ e
_menospr) e (zL04_ E
_emagr) e (çL03 _emagr) e (çL03
pr) e (çL03_ e // a- pr) e (çL03_ e // a-
aqu) e (çL03_ e // re-
mer) e (çL03_ e // des- mer) e (çL03_ e // des-
pad) e (çL03_ e // com- pad) e (çL03_ e // com-
par) e (çL03_ e // a- re- com- rea- desa- par) e (çL03_ e // a- re- com- rea- desa-
_ado) e (çL03_ e _ado) e (çL03_ e
_aqu) e (çL03_ e
_car) e (çL03_ e _car) e (çL03_ e
_per) e (çL03_ e_ _per) e (çL03_ e_
conh) e (çL03_ e // re- conh) e (çL03_ e // re-
_ofer) e (çL03_ e _ofer) e (çL03_ e
abast) e (çL03_ e // re- abast) e (çL03_ e // re-
_aborr) e (çL03_ e _aborr) e (çL03_ e
_acont) e (çL03_ e
_agrad) e (çL03_ e _agrad) e (çL03_ e
_amanh) e (çL03_ e _amanh) e (çL03_ e
_amort) e (çL03_ e _amort) e (çL03_ e
_anoit) e (çL03_ e _anoit) e (çL03_ e
_arref) e (çL03_ e
_desguarn) e (çL03_ e _desguarn) e (çL03_ e
_desguarnec) e (çL03_ e _desguarnec) e (çL03_ e
_enfraqu) e (çL03_ e _enfraqu) e (çL03_ e
?1 v) o (lt O ?1 v) o (lt O


//sort //sort
_f) o (L06_ o
_engl) o (bL01_ O _engl) o (bL01_ O
_s) o (bL02_ O _s) o (bL02_ O
_esn) o (bL04_ O _esn) o (bL04_ O
_ens) o (pL04_ O _ens) o (pL04_ O
_s) o (prL04_ O _s) o (prL04_ O
_) o (ptL04_ O _) o (ptL04_ O
_inod) o (rL03_ O
_inson) o (rL03_ O
_comem) o (rL04 O
_remem) o (rL04_ O
_enf) o (rquL02_ O _enf) o (rquL02_ O
c) o (rrL01_ o // escorra, incorra, corra, recorra c) o (rrL01_ o // escorra, incorra, corra, recorra
_m) o (rrL01_ o _m) o (rrL01_ o
_r) o (snL04_ O _r) o (snL04_ O
_c) o (spL02_ O _c) o (spL02_ O
p) ostos (_ Ost=Us# // dispostos etc. p) ostos (_ Ost=Us# // dispostos etc.
_gar) o (tL03_ o
_g) o (zL04_ O _g) o (zL04_ O
_ad) o (çL03_ O _ad) o (çL03_ O
_end) o (çL03_ O _end) o (çL03_ O
r (C *@- r (C *@-
A) r (A * A) r (A *
A) r (_A * A) r (_A *
rr rx
rr x
XC) r (A R XC) r (A R
C) r (A * C) r (A *
//?1 C) r (A r
_) r x _) r x
l) r x l) r x
n) r (+ x n) r (+ x

+ 4
- 4
dictsource/ta_list View File





// speak Latin letters as English // speak Latin letters as English
a e:j
a e:j $atend
b bi: b bi:
c si: c si:
d di: d di:
f Ef f Ef
g dZi: g dZi:
h e:tS h e:tS
i a:j
i a:j $atend
j dZe:j j dZe:j
k ke:j k ke:j
l El l El
q kju: q kju:
r a:R r a:R
s Es s Es
t thi:
t t#i:
u ju: u ju:
v vi: v vi:
w dVbVlju: w dVbVlju:
கிர் $alt கிர் $alt
கங்க $alt கங்க $alt
காந்த $alt காந்த $alt
கேம் $alt







+ 25
- 0
dictsource/ta_rules View File

_) கி (ளாமர g _) கி (ளாமர g
_) கி (ளாஸ்_ g _) கி (ளாஸ்_ g
_) கி (ளாஸ்_மேட k _) கி (ளாஸ்_மேட k
_) கிளாஸ்க (ோ gl.a:sg
_) கிளிக் (_L29 kl.ik _) கிளிக் (_L29 kl.ik
_) கிளிட kl.it.V# _) கிளிட kl.it.V#
_) கிளிண்ட (ன klint.V _) கிளிண்ட (ன klint.V
_) க (ேட்டைக் g _) க (ேட்டைக் g
_) க (ேட்டைத் g _) க (ேட்டைத் g
_) க (ேட்டைப் g _) க (ேட்டைப் g
_) க (ேமை g
_) க (ேம்ஸ g _) க (ேம்ஸ g
_) கேரண்ட ge:rVn.t.V# _) கேரண்ட ge:rVn.t.V#
_) க (ேலரி g _) க (ேலரி g
அ) க (ாடமி k அ) க (ாடமி k
_நேர்) க (ாணல k _நேர்) க (ாணல k
_கண்) க (ாணா k _கண்) க (ாணா k
_கர்ம) க (ாண்ட g
உத்திரா) க (ாண்ட k உத்திரா) க (ாண்ட k
_ராம) க (ாதை k _ராம) க (ாதை k
இராம) க (ாதை k இராம) க (ாதை k
_ப) சக் tSVk _ப) சக் tSVk
_) ச (க்கரவர்த்தி tSV _) ச (க்கரவர்த்தி tSV
_) ச (க்கிலி tSV _) ச (க்கிலி tSV
_) சக் (ரவர்த்தி tSVk
_க) ச (க்ஸ்தான zV _க) ச (க்ஸ்தான zV
சங்க (ர s.VNkV சங்க (ர s.VNkV
_) ச (ட்டL08ஸ்கர tSV _) ச (ட்டL08ஸ்கர tSV
_வரதா) ச (ாரி tS _வரதா) ச (ாரி tS
_வேதா) ச (ாரி tS _வேதா) ச (ாரி tS
_கிருஷ்ணமா) ச (ாரி tS _கிருஷ்ணமா) ச (ாரி tS
_கோபால) ச (ாரி tS
_சங்கரா) ச (ாரி tS
_தேசிகா) ச (ாரி tS _தேசிகா) ச (ாரி tS
_பட்டா) ச (ாரி tS _பட்டா) ச (ாரி tS
_பிரம்ம) ச (ாரி tS
_மத்வா) ச (ாரி tS _மத்வா) ச (ாரி tS
அனந்தா) ச (ாரி tS அனந்தா) ச (ாரி tS
அன்னமா) ச (ாரி tS அன்னமா) ச (ாரி tS
ராஜகோபால) ச (ாரி tS
ராமானுஜா) ச (ாரி tS
ஆ) ச (ாரிய_ tS ஆ) ச (ாரிய_ tS
ஆ) ச (ாரியார tS ஆ) ச (ாரியார tS
அ) ச (ாருதீன z அ) ச (ாருதீன z
_மால) த (ி t _மால) த (ி t
_ரேவ) த (ி t _ரேவ) த (ி t
_வசந்) த (ி t _வசந்) த (ி t
அவந்) த (ி t
வாசந்) த (ி t வாசந்) த (ி t
_கோம) த (ி t _கோம) த (ி t
ஜெயந்) த (ி t ஜெயந்) த (ி t
_) ப (ாகீரதி b _) ப (ாகீரதி b
_) ப (ாக்கிக் b _) ப (ாக்கிக் b
_) ப (ாக்கிய b _) ப (ாக்கிய b
_) ப (ாக்டரி_ f
_) ப (ாக்டரியா b
_) ப (ாக்டரியி f
_) ப (ாக்டரியை f
_) பாக்ட (ீரியா ba:kt. _) பாக்ட (ீரியா ba:kt.
_) பாக்த (ாத ba:gd _) பாக்த (ாத ba:gd
_) ப (ாக்ய b _) ப (ாக்ய b
_) ப (ாவேய b _) ப (ாவேய b
_) ப (ாவ்நகர b _) ப (ாவ்நகர b
_) ப (ாஷாக்கள b _) ப (ாஷாக்கள b
_) ப (ாஷாபிமான b
_) ப (ாஷாவ b _) ப (ாஷாவ b
_) ப (ாஷிய b _) ப (ாஷிய b
_) ப (ாஷை b _) ப (ாஷை b
_) பி (ராதித் p _) பி (ராதித் p
_) பி (ராத்தல b _) பி (ராத்தல b
_) பி (ராந்தி_ b _) பி (ராந்தி_ b
_) பி (ராந்திய_ p
_) பி (ராந்தியங் p _) பி (ராந்தியங் p
_) பி (ராந்தியத் p _) பி (ராந்தியத் p
_) பி (ராந்தியம்_ p _) பி (ராந்தியம்_ p
_) பி (ரித்தானி b _) பி (ரித்தானி b
_) பிரின்சிப (ால prinsip _) பிரின்சிப (ால prinsip
_) பி (ரிமிய p _) பி (ரிமிய p
_) பி (ரியங்கள p
_) பிரியங்க (ா prijVNk _) பிரியங்க (ா prijVNk
_) பி (ரியதர p _) பி (ரியதர p
_) பி (ரியத்த p
_) பி (ரியன p _) பி (ரியன p
_) பி (ரியப்பட p _) பி (ரியப்பட p
_) பி (ரியம p _) பி (ரியம p
_) ப (ோதகன b _) ப (ோதகன b
_) ப (ோதகர b _) ப (ோதகர b
_) ப (ோதன b _) ப (ோதன b
_) ப (ோதம b
_) ப (ோதிக்க b _) ப (ோதிக்க b
_) ப (ோதிசத் b _) ப (ோதிசத் b
_) ப (ோதிசத்வ b _) ப (ோதிசத்வ b
_) ப (ோர்_அடி b _) ப (ோர்_அடி b
_) ப (ோர்ஜரி f _) ப (ோர்ஜரி f
_) ப (ோர்டL31 b _) ப (ோர்டL31 b
_) ப (ோர்டு b
_) ப (ோர்ட்டிகோ p
_) ப (ோர்தான்_அடி b _) ப (ோர்தான்_அடி b
_) ப (ோர்மேன f _) ப (ோர்மேன f
_) ப (ோர்வெல் b _) ப (ோர்வெல் b
ஆ) ப (ரேஷன pV ஆ) ப (ரேஷன pV
_கார்) ப (ரேஷன pV _கார்) ப (ரேஷன pV
_பம்) ப (ர்_ pV _பம்) ப (ர்_ pV
அ) ப (ர்ணா pV
_கன்) ப (ர்ம fV _கன்) ப (ர்ம fV
இன்) ப (ர்ம fV இன்) ப (ர்ம fV
கரம்) ப (ற் pV கரம்) ப (ற் pV
இம்) ப (ால f இம்) ப (ால f
இரு) ப (ால p இரு) ப (ால p
ஒரு) ப (ால p ஒரு) ப (ால p
_தங்க) ப (ால b
ஆண்) ப (ால p ஆண்) ப (ால p
_பெண்) ப (ால p _பெண்) ப (ால p
L03தன்) ப (ால p L03தன்) ப (ால p
கம்) ப்யூட (ர pjU:t.V கம்) ப்யூட (ர pjU:t.V
_பெர்) ப் (யூம f _பெர்) ப் (யூம f
_யூ) ப்ரட (ீஸ frVt. _யூ) ப்ரட (ீஸ frVt.
_சு) ப் (ரியா p
_ஸ்ரீ) ப் (ரியா p _ஸ்ரீ) ப் (ரியா p
_சு) ப் (ரீம p _சு) ப் (ரீம p
_) ப் (ரீயா f _) ப் (ரீயா f
இ (ரதத்த இ (ரதத்த
இ (ரதம இ (ரதம
இ (ரத்த இ (ரத்த
இ (ரபீந்திர
இரப்ப (ர rVbbV இரப்ப (ர rVbbV
இ (ரமண இ (ரமண
இ (ரம்மிய இ (ரம்மிய

+ 1
- 1
dictsource/te_list View File

q kju: q kju:
r a:r r a:r
s Es s Es
t thi:
t t#i:
u ju: u ju:
v vi: v vi:
w dVbVlju: w dVbVlju:

+ 4
- 4
dictsource/vi_rules View File

//================================ //================================
// Consonants // Consonants
//================================ //================================
.L01 t c ne nd k x s nt ch th me te le ce ny ry e o u re nch de p pe ph sh v ve
.L01 t c ne nd k x s nt ch th me te le ce ny ry e o u re nch de p pe ph sh v ve ge
.L02 n .L02 n
.group i .group i
i i i i
i (A j
//i (A j
ia i@ ia i@
ià i@2 ià i@2
iá i@3 iá i@3
.group y .group y
y i y i
y (A j
// y (A j
ya i@ ya i@
yà i@2 yà i@2
yá i@3 yá i@3
yệ i@6 yệ i@6
// yêu i@U // yêu i@U
y (L01 _^_EN
.group ỳ .group ỳ
ỳ i2 ỳ i2

+ 5
- 6
docs/phonemes.html View File

<table> <table>
<tbody valign=top> <tbody valign=top>
<tr> <tr>
<td width=25><code>[p]</code><td width=150>
<td width=25><code>[b]</code><td width=150>
<td width=25><code>[p]</code><td width=80>
<td width=25><code>[b]</code><td width=80>
<tr> <tr>
<td><code>[t]</code><td> <td><code>[t]</code><td>
<td><code>[d]</code><td> <td><code>[d]</code><td>
<table> <table>
<tbody valign=top> <tbody valign=top>
<tr><td width=25><code>[@]</code> <tr><td width=25><code>[@]</code>
<td width=60>alph<b>a</b><td width=400>schwa
<td width=60>alph<b>a</b><td width=80>schwa


<tr><td><code>[3]</code> <tr><td><code>[3]</code>
<td>bett<b>er</b><td>rhotic schwa. In British English this is the same as <code>[@]</code>, but it includes 'r' colouring in American and other rhotic accents. In these cases a separate <code>[r]</code> should not be included unless it is followed immediately by another vowel. <td>bett<b>er</b><td>rhotic schwa. In British English this is the same as <code>[@]</code>, but it includes 'r' colouring in American and other rhotic accents. In these cases a separate <code>[r]</code> should not be included unless it is followed immediately by another vowel.


<tr><td><code>[a]</code><td>tr<b>a</b>p <tr><td><code>[a]</code><td>tr<b>a</b>p
<tr><td><code>[aa]</code><td>b<b>a</b>th<td>This is <code>[a]</code> in some accents, <code>[A:]</code> in others. <tr><td><code>[aa]</code><td>b<b>a</b>th<td>This is <code>[a]</code> in some accents, <code>[A:]</code> in others.
<tr><td><code>[a#]</code><td><b>a</b>bout<td>This may be <code>[@]</code> or may be a more open schwa.
<tr><td><code>[a2]</code><td><b>a</b>bout<td>This may be <code>[@]</code> or may be a more open schwa.
<tr><td><code>[A:]</code><td>p<b>al</b>m <tr><td><code>[A:]</code><td>p<b>al</b>m
<tr><td><code>[A@]</code><td>st<b>ar</b>t <tr><td><code>[A@]</code><td>st<b>ar</b>t
<tr><td><p> <tr><td><p>


</tbody> </tbody>
</table> </table>
<p>
<code> [:] </code> can be used to lengthen a vowel, eg <code> [e:]</code>



</body> </body>
</html> </html>

espeak-data/voices/test/an → espeak-data/voices/europe/an View File


BIN
phsource/klatt/nr View File


+ 53
- 62
phsource/ph_danish View File



phoneme i phoneme i
vowel starttype #i endtype #i vowel starttype #i endtype #i
length 90 //150
length 95 //150
// PB long vowel followed by consonant and certain vowels "gide" // PB long vowel followed by consonant and certain vowels "gide"
IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(#e) THEN
IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(V) THEN
length 150 length 150
ENDIF ENDIF
// "gider" TEST
// "gider", vrider"
IF nextPhW(D) AND next2PhW(V) OR next2PhW(?V) THEN IF nextPhW(D) AND next2PhW(V) OR next2PhW(?V) THEN
length 90
length 95
ENDIF ENDIF
// PB long vowel followed by certain vowels - "pigen" [p'i@-n] // PB long vowel followed by certain vowels - "pigen" [p'i@-n]
IF nextPhW(#@) OR nextPhW(#e) THEN IF nextPhW(#@) OR nextPhW(#e) THEN
ENDIF ENDIF
// "vilje" - short followed by 2 consonants // "vilje" - short followed by 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 90
length 95
ENDIF ENDIF
// PB "tie", "stige", "krige" vowel + vowel: extra length // PB "tie", "stige", "krige" vowel + vowel: extra length
// What is causing this very short [i] in words with final [@-]? // What is causing this very short [i] in words with final [@-]?


phoneme e phoneme e
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 90 //150
length 95 //150
// "delte", "mente" // "delte", "mente"
IF nextPhW(#e) OR nextPhW(#@) OR next2PhW(#e) OR next2PhW(#@) THEN
IF nextPhW(@-) OR nextPhW(V) OR next2PhW(@-) OR next2PhW(V) THEN
length 150 length 150
ENDIF ENDIF
// PB "ring", "ringe" // PB "ring", "ringe"
IF nextPhW(N) THEN IF nextPhW(N) THEN
length 90
length 95
ENDIF ENDIF
// PB "enig", "enige", "evig" // PB "enig", "enige", "evig"
IF nextPhW(isNotVowel) AND next2PhW(i) THEN IF nextPhW(isNotVowel) AND next2PhW(i) THEN
ENDIF ENDIF
// "nedladende" [n'eDl&D@-n@-] - before 2 consonants: short // "nedladende" [n'eDl&D@-n@-] - before 2 consonants: short
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 90
length 95
ENDIF ENDIF
FMT(vowel/e) FMT(vowel/e)
endphoneme endphoneme


phoneme E phoneme E
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 90 //150
length 100 //150
// "værelse", "breve" // "værelse", "breve"
IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(@-) THEN IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(@-) THEN
// length 150 // length 150
ENDIF ENDIF
// "ræve" // "ræve"
IF nextVowel(#@) OR nextVowel(#e) THEN IF nextVowel(#@) OR nextVowel(#e) THEN
length 150
length 160
ENDIF ENDIF
// "ære", "kærester", "ærefrygt" - longer E // "ære", "kærester", "ærefrygt" - longer E
IF nextPhW(V) THEN IF nextPhW(V) THEN
ENDIF ENDIF
// Only the letter "æ" - long // Only the letter "æ" - long
IF thisPh(isWordEnd) AND thisPh(isWordStart) THEN IF thisPh(isWordEnd) AND thisPh(isWordStart) THEN
length 150
length 160
ENDIF ENDIF
// "stædig" [st'EDi] long // "stædig" [st'EDi] long
IF nextPhW(isNotVowel) AND next2PhW(i) THEN IF nextPhW(isNotVowel) AND next2PhW(i) THEN
length 150
length 160
ENDIF ENDIF
// "længe" - short - 2 consonants => 1 consonant // "længe" - short - 2 consonants => 1 consonant
IF nextPhW(N) THEN IF nextPhW(N) THEN
length 90
length 120
ENDIF ENDIF
// "værelse" [v'E3-Vls@_!] // "værelse" [v'E3-Vls@_!]
IF nextPhW(3-) AND next2PhW(V) THEN IF nextPhW(3-) AND next2PhW(V) THEN
length 90
length 120
ENDIF ENDIF
// "mælkebøtte" - short followed by 2 consonants // "mælkebøtte" - short followed by 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 90
length 120
ENDIF ENDIF
FMT(vowel/e_mid2) FMT(vowel/e_mid2)
endphoneme endphoneme
// "læsse" vs. "læse" // "læsse" vs. "læse"
phoneme ?E phoneme ?E
vowel starttype #e endtype #e vowel starttype #e endtype #e
length 90
// PB "færre" [f'?EV] - a bit longer because og the missing [ɐ] [ˈfæɐ̯ʌ]
// Changed now [f'?E3-V] but it won't do any harm
IF nextPhW(V) THEN
length 120
ENDIF
ipa ε
length 100
FMT(vowel/e_mid2) FMT(vowel/e_mid2)
endphoneme endphoneme


// ThisPh + gooup #e or group #@ // ThisPh + gooup #e or group #@
// "ae", "aer" vowel + vowel: extra length // "ae", "aer" vowel + vowel: extra length
IF nextPhW(#@) OR nextPhW(#e) THEN IF nextPhW(#@) OR nextPhW(#e) THEN
length 240
length 220
ENDIF ENDIF
// This vowel is word end - longer because it sounds too short // This vowel is word end - longer because it sounds too short
// "ja", "Omaha" // "ja", "Omaha"
// "bange" [bAN@-] - [N] = 2 consonants (ng) => short // "bange" [bAN@-] - [N] = 2 consonants (ng) => short
IF nextPhW(N) THEN IF nextPhW(N) THEN
length 90 length 90
ENDIF
// "fare" [f'A:A]
IF nextPhW(A) THEN
length 150
ENDIF ENDIF
FMT(vowel/a_8) FMT(vowel/a_8)
endphoneme endphoneme
phoneme u phoneme u
vowel starttype #u endtype #u vowel starttype #u endtype #u
length 90 //150 length 90 //150
// Short vowel followed by consonant and NOT consonant + 3 or V or @
// "blus" vs. "bluse" and "bluser"
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
// glstop
// length 90
ENDIF
// "suge", "uge", bluse
// "suge", "uge", "bluse", "julegave"
IF nextPhW(#e) OR nextPhW(#@) OR next2PhW(#e) OR next2PhW(#@)THEN IF nextPhW(#e) OR nextPhW(#@) OR next2PhW(#e) OR next2PhW(#@)THEN
length 150 length 150
ENDIF ENDIF
// extra length followed by 3 or V or @
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) THEN
// length 240
ENDIF
// "umulig"
// "umulig" [u:m'uli]
IF nextVowel(i) AND nextVowel(isFinalVowel) AND nextVowel(isWordEnd) THEN IF nextVowel(i) AND nextVowel(isFinalVowel) AND nextVowel(isWordEnd) THEN
length 180 length 180
ENDIF ENDIF
// Only "u" // Only "u"
IF thisPh(isWordEnd) AND thisPh(isWordStart) THEN IF thisPh(isWordEnd) AND thisPh(isWordStart) THEN
length 150 length 150
ENDIF
// "fugl" [ful] - a bit longer
IF nextPhW(isWordEnd) THEN
length 120
ENDIF ENDIF
FMT(vowel/u_bck) FMT(vowel/u_bck)
endphoneme endphoneme


phoneme o phoneme o
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 150
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
glstop
length 90
ENDIF
// "tro"
IF thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
length 90 //150
// "bore", "borer"
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@-) THEN
length 150 length 150
ENDIF ENDIF
// "modig" - long vowel after consonant + [i] // "modig" - long vowel after consonant + [i]
IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(i) THEN
IF nextPhW(D) AND next2PhW(i) THEN
length 150 length 150
ENDIF ENDIF
FMT(vowel/o_2) FMT(vowel/o_2)
phoneme O phoneme O
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 90 // 150 length 90 // 150
// PB "sove", "sover" - consonant + #e or #@: long
// "sove", "sover" - consonant + #e or #@: long
IF next2PhW(#@) OR next2PhW(#e) THEN IF next2PhW(#@) OR next2PhW(#e) THEN
length 150 length 150
ENDIF ENDIF
FMT(vowel/o_5) FMT(vowel/o_5)
endphoneme endphoneme


// PB Experimental glottal O
// Short O
// "toget" vs. "tåget" // "toget" vs. "tåget"
phoneme ?O phoneme ?O
vowel starttype #o endtype #o vowel starttype #o endtype #o
IF nextPhW(isNotVowel) AND next2Ph(V) THEN IF nextPhW(isNotVowel) AND next2Ph(V) THEN
length 90 length 90
ENDIF ENDIF
// PB "snorke", "snorker", årlig
// "snorke", "snorker", årlig
IF next2PhW(3) OR next2PhW(V) OR next2PhW(@) OR next2PhW(i) THEN IF next2PhW(3) OR next2PhW(V) OR next2PhW(@) OR next2PhW(i) THEN
length 180 length 180
ENDIF ENDIF
// "sove" [sVw3] - longer followed by w + 3 // "sove" [sVw3] - longer followed by w + 3
IF nextPhW(w) AND next2PhW(3) THEN IF nextPhW(w) AND next2PhW(3) THEN
length 220 length 220
ENDIF
// PB "konge"
IF nextPhW(N) THEN
length 95
ENDIF ENDIF
FMT(vowel/V_4) FMT(vowel/V_4)
endphoneme endphoneme
// "forstår" vs. "kåre" // "forstår" vs. "kåre"
phoneme ?V phoneme ?V
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 100
length 90
FMT(vowel/V_4) FMT(vowel/V_4)
endphoneme endphoneme


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


// ?B short 0 "sukker"
// Short 0 "sukker"
phoneme ?0 phoneme ?0
vowel starttype #o endtype #o vowel starttype #o endtype #o
length 90 length 90


phoneme W phoneme W
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 99 //160
// "kløe" vowel + vowel: extra length
length 90 //160
// "kløe" vowel + vowel: extra length
IF nextPhW(#@) OR nextPhW(#e) THEN IF nextPhW(#@) OR nextPhW(#e) THEN
length 220 length 220
ENDIF ENDIF
IF next2PhW(#@) OR next2PhW(#e) THEN IF next2PhW(#@) OR next2PhW(#e) THEN
length 160 length 160
ENDIF ENDIF
// "røveri" TEST
IF next2PhW(V) OR next2PhW(?V) THEN
// "røveri" but NOT "surfer" [sWf?V] TEST
IF next2PhW(V) OR next2PhW(?V) AND NOT next2PhW(isFinalVowel) THEN
length 90 length 90
ENDIF ENDIF
// PB "nødig", "nødigt", "kølige" // PB "nødig", "nødigt", "kølige"
FMT(vowel/oe) FMT(vowel/oe)
endphoneme endphoneme


// PB short W
// Short W
// "prøv" vs. "prøve" // "prøv" vs. "prøve"
phoneme ?W phoneme ?W
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
FMT(vowel/oe) FMT(vowel/oe)
endphoneme endphoneme


// PB added for the ø in "røv", "røg", "øje" instead of [V3]
// Added for the ø in "røv", "røg", "øje" instead of [V3]
phoneme W# phoneme W#
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 90 //150 length 90 //150
FMT(vowel/V) FMT(vowel/V)
endphoneme endphoneme


// PB short W#
// Short W#
// "rømme" // "rømme"
phoneme ?W# phoneme ?W#
vowel starttype #@ endtype #@ vowel starttype #@ endtype #@
length 90 length 90
FMT(vowel/V)
FMT(vowel/V)
endphoneme endphoneme


phoneme aI phoneme aI


PrevVowelEndings PrevVowelEndings
VowelEnding(l/l_@) VowelEnding(l/l_@)
VowelEnding(l/l_a)
VowelEnding(l/l_a,-70) // kvalt, kapital
VowelEnding(l/l_e, -40) VowelEnding(l/l_e, -40)
VowelEnding(l/l_i, -70) VowelEnding(l/l_i, -70)
VowelEnding(l/l_o)
VowelEnding(l/l_o,-70) // stole, skole, pistol
VowelEnding(l/l_u, -70) VowelEnding(l/l_u, -70)
EndSwitch EndSwitch


VowelStart(j/ja) VowelStart(j/ja)
VowelStart(j/je,-35) VowelStart(j/je,-35)
VowelStart(j/ji) VowelStart(j/ji)
VowelStart(j/jo)
VowelStart(j/jo,-65) // "kjole"
VowelStart(j/ju) VowelStart(j/ju)
EndSwitch EndSwitch
Vowelout len=70 Vowelout len=70

+ 3
- 0
phsource/ph_english View File

IF nextPh(isVowel) THEN IF nextPh(isVowel) THEN
ChangePhoneme(I2) ChangePhoneme(I2)
ENDIF ENDIF
IF nextPh(isVowel) THEN
FMT(vowel/ii_4)
ENDIF
FMT(vowel/@) FMT(vowel/@)
endphoneme endphoneme



+ 2
- 4
phsource/ph_hindi View File

ChangePhoneme(NULL) ChangePhoneme(NULL)
ENDIF ENDIF


IF nextVowel(isFlag1) THEN
ELSE
IF NOT nextVowel(isFlag1) THEN
IF thisPh(isSeqFlag1) THEN IF thisPh(isSeqFlag1) THEN
// delete the last inherent vowel of a sequence // delete the last inherent vowel of a sequence
ChangePhoneme(NULL) ChangePhoneme(NULL)
ELSE ELSE
IF thisPh(isFirstVowel) THEN
ELSE
IF NOT thisPh(isFirstVowel) THEN
// delete if not the first vowel, and is an isolated 'a' // delete if not the first vowel, and is an isolated 'a'
ChangePhoneme(NULL) ChangePhoneme(NULL)
ENDIF ENDIF

BIN
phsource/r/V_ View File


BIN
phsource/r/V_2_ View File


BIN
phsource/vnasal/&_n View File


BIN
phsource/vnasal/&u_n View File


BIN
phsource/vnasal/V_n View File


BIN
phsource/vnasal/W_n View File


BIN
phsource/vnasal/a#_n View File


BIN
phsource/vnasal/a#_n2 View File


BIN
phsource/vnasal/a#u_n View File


BIN
phsource/vnasal/aa_n View File


BIN
phsource/vnasal/aa_n2 View File


BIN
phsource/vnasal/aa_n3 View File


BIN
phsource/vnasal/aa_n4 View File


BIN
phsource/vnasal/e#_n View File


BIN
phsource/vnasal/e_n View File


BIN
phsource/vnasal/ee_n View File


BIN
phsource/vnasal/ee_n2 View File


BIN
phsource/vnasal/ee_u_n View File


BIN
phsource/vnasal/i_n View File


BIN
phsource/vnasal/i_n2 View File


BIN
phsource/vnasal/ii_n View File


BIN
phsource/vnasal/o_n View File


BIN
phsource/vnasal/o_n2 View File


BIN
phsource/vnasal/o_n3 View File


BIN
phsource/vnasal/o_n4 View File


BIN
phsource/vnasal/oi_n View File


BIN
phsource/vnasal/oo_n View File


BIN
phsource/vnasal/oo_n2 View File


BIN
phsource/vnasal/oo_n3 View File


BIN
phsource/vnasal/u_n View File


BIN
phsource/vnasal/vowelchart.png View File


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

#define NO_VARIADIC_MACROS #define NO_VARIADIC_MACROS
#define INCLUDE_KLATT #define INCLUDE_KLATT
#define INCLUDE_MBROLA #define INCLUDE_MBROLA
#define INCLUDE_SONIC
// will look for espeak_data directory here, and also in user's home directory // will look for espeak_data directory here, and also in user's home directory
#define PATH_ESPEAK_DATA "/usr/share/espeak-data" #define PATH_ESPEAK_DATA "/usr/share/espeak-data"

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

#define LIBRARY #define LIBRARY
#define INCLUDE_KLATT #define INCLUDE_KLATT
#define INCLUDE_MBROLA #define INCLUDE_MBROLA
#define INCLUDE_SONIC


// will look for espeak_data directory here, and also in user's home directory // will look for espeak_data directory here, and also in user's home directory
#define PATH_ESPEAK_DATA "/usr/share/espeak-data" #define PATH_ESPEAK_DATA "/usr/share/espeak-data"

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

//#define USE_NANOSLEEP //#define USE_NANOSLEEP
#define INCLUDE_KLATT #define INCLUDE_KLATT
#define INCLUDE_MBROLA #define INCLUDE_MBROLA
#define INCLUDE_SONIC
// will look for espeak_data directory here, and also in user's home directory // will look for espeak_data directory here, and also in user's home directory
#define PATH_ESPEAK_DATA "/usr/share/espeak-data" #define PATH_ESPEAK_DATA "/usr/share/espeak-data"

+ 23
- 5
src/compiledata.cpp View File

REF_HASH_TAB **list; REF_HASH_TAB **list;
const char *data_path; const char *data_path;
int prev_table; int prev_table;
int procedure_num;
int prev_mnemonic; int prev_mnemonic;


if(f_report == NULL) if(f_report == NULL)
j++; j++;
} }


fprintf(f_report," [%s] %s",WordToString(prev_mnemonic = list[ix]->ph_mnemonic), phoneme_tab_list2[prev_table = list[ix]->ph_table].name);
prev_mnemonic = list[ix]->ph_mnemonic;
if((prev_mnemonic >> 24) == 'P')
{
// a procedure, not a phoneme
procedure_num = atoi(WordToString(prev_mnemonic));
fprintf(f_report," %s %s", phoneme_tab_list2[prev_table = list[ix]->ph_table].name, proc_names[procedure_num]);
}
else
{
fprintf(f_report," [%s] %s",WordToString(prev_mnemonic), phoneme_tab_list2[prev_table = list[ix]->ph_table].name);
}
fputc('\n',f_report); fputc('\n',f_report);
} }


} }


sprintf(command,"sox \"%s%s.wav\" -r %d -c1 -t wav %s\n",path_source,fname2,samplerate_native, fname_temp); sprintf(command,"sox \"%s%s.wav\" -r %d -c1 -t wav %s\n",path_source,fname2,samplerate_native, fname_temp);
if(system(command) < 0)
if(system(command) != 0)
{ {
failed = 1; failed = 1;
} }
} }
strcpy(proc_names[n_procs], item_string); strcpy(proc_names[n_procs], item_string);
phoneme_out = &phoneme_out2; phoneme_out = &phoneme_out2;
sprintf(number_buf,"%.3dP", n_procs);
phoneme_out->mnemonic = StringToWord(number_buf);
} }


phoneme_out->code = phcode; phoneme_out->code = phcode;
make_envs(); make_envs();
#endif #endif


wxLogStatus(_T("Compiling phoneme data: ")+wxString(path_source,wxConvLocal));
n_envelopes = 0; n_envelopes = 0;
error_count = 0; error_count = 0;
resample_count = 0; resample_count = 0;
memset(markers_used,0,sizeof(markers_used));
memset(markers_used,0,sizeof(markers_used));


f_errors = stderr; f_errors = stderr;




if(error_count > 0) if(error_count > 0)
{ {
report += _T(" See file: 'phsource/error_log'.");
report += _T(" See file: '")+wxString(path_source,wxConvLocal)+_T("phsource/error_log'.");
wxLogError(report); wxLogError(report);
} }
wxLogStatus(report + report_dict); wxLogStatus(report + report_dict);
void CompileSampleRate() void CompileSampleRate()
{ {
long value; long value;
value = wxGetNumberFromUser(_T("Compile phoneme data with a specified sample rate"), _T("Sample rate"), _T("Resample (needs sox)"), 22050, 5000, 48000);
#ifndef PLATFORM_POSIX
wxLogError(_T("Change Sample Rate needs the 'sox' program. It probably doesn't work on Windows"));
#endif

value = wxGetNumberFromUser(_T("Compile phoneme data with a specified sample rate"), _T("Sample rate"), _T("Resample (needs 'sox' program)"), 22050, 5000, 48000);


if(value > 1000) if(value > 1000)
{ {

+ 2
- 2
src/dictionary.cpp View File

continue; continue;
} }


if((dictionary_flags2 & FLAG_ATEND) && (word_end < tr->clause_end))
if((dictionary_flags2 & FLAG_ATEND) && (word_end < translator->clause_end))
{ {
// only use this pronunciation if it's the last word of the clause // only use this pronunciation if it's the last word of the clause
continue; continue;
continue; continue;
} }


if((dictionary_flags2 & FLAG_SENTENCE) && !(tr->clause_terminator & CLAUSE_BIT_SENTENCE))
if((dictionary_flags2 & FLAG_SENTENCE) && !(translator->clause_terminator & CLAUSE_BIT_SENTENCE))
{ {
// only uis this clause is a sentence , i.e. terminator is {. ? !} not {, : :} // only uis this clause is a sentence , i.e. terminator is {. ? !} not {, : :}
continue; continue;

+ 2
- 2
src/menus.cpp View File

data_menu = new wxMenu; data_menu = new wxMenu;
data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary")); data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary"));
data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)")); data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)"));
data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data"));
data_menu->Append(MENU_COMPILE_PH2, _("Change sample &rate"));
data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data 22050Hz"));
data_menu->Append(MENU_COMPILE_PH2, _("Compile at sample &rate"));
data_menu->AppendSeparator(); data_menu->AppendSeparator();
data_menu->Append(MENU_COMPILE_MBROLA, _("Compile &mbrola phonemes list...")); data_menu->Append(MENU_COMPILE_MBROLA, _("Compile &mbrola phonemes list..."));
data_menu->Append(MENU_COMPILE_INTONATION, _("Compile &intonation data")); data_menu->Append(MENU_COMPILE_INTONATION, _("Compile &intonation data"));

+ 46
- 12
src/phonemelist.cpp View File

int regression; int regression;
int end_sourceix; int end_sourceix;
int alternative; int alternative;
int delete_count;
int word_start;
PHONEME_DATA phdata; PHONEME_DATA phdata;


int n_ph_list3; int n_ph_list3;
} }


// look for switch of phoneme tables // look for switch of phoneme tables
delete_count = 0;
current_phoneme_tab = tr->phoneme_tab_ix; current_phoneme_tab = tr->phoneme_tab_ix;
for(j = 0; j < n_ph_list2; j++) for(j = 0; j < n_ph_list2; j++)
{ {
if(plist2[j].phcode == phonSWITCH)
{
current_phoneme_tab = plist2[j].tone_ph;
}
if(current_phoneme_tab != tr->phoneme_tab_ix) if(current_phoneme_tab != tr->phoneme_tab_ix)
{ {
plist2[j].synthflags |= SFLAG_SWITCHED_LANG; plist2[j].synthflags |= SFLAG_SWITCHED_LANG;
} }

if(delete_count > 0)
{
memcpy(&plist2[j-delete_count], &plist2[j], sizeof(plist2[0]));
}

if(plist2[j].phcode == phonSWITCH)
{
if((!(plist2[j].synthflags & SFLAG_EMBEDDED)) && (
(plist2[j].tone_ph == current_phoneme_tab) ||
(plist2[j+1].phcode == phonSWITCH) ||
((plist2[j+1].phcode == phonPAUSE) && (plist2[j+2].phcode == phonSWITCH))
))
{
// delete this phonSWITCH if it's switching to the current phoneme table, or
// delete this phonSWITCH if its followed by another phonSWITCH
delete_count++;
}
else
{
current_phoneme_tab = plist2[j].tone_ph;
}
}

} }
n_ph_list2 -= delete_count;


if((regression = tr->langopts.param[LOPT_REGRESSIVE_VOICING]) != 0) if((regression = tr->langopts.param[LOPT_REGRESSIVE_VOICING]) != 0)
{ {
// transfer all the phonemes of the clause into phoneme_list // transfer all the phonemes of the clause into phoneme_list
ph = phoneme_tab[phonPAUSE]; ph = phoneme_tab[phonPAUSE];
ph_list3[0].ph = ph; ph_list3[0].ph = ph;
word_start = 1;


for(j=0; insert_ph || ((j < n_ph_list3) && (ix < N_PHONEME_LIST-3)); j++) for(j=0; insert_ph || ((j < n_ph_list3) && (ix < N_PHONEME_LIST-3)); j++)
{ {
plist3 = &ph_list3[j]; plist3 = &ph_list3[j];


if(plist3->sourceix != 0)
word_start = j;

if(insert_ph != 0) if(insert_ph != 0)
{ {
// we have a (linking) phoneme which we need to insert here // we have a (linking) phoneme which we need to insert here
next = phoneme_tab[plist3->phcode]; // this phoneme, i.e. after the insert next = phoneme_tab[plist3->phcode]; // this phoneme, i.e. after the insert


// re-use the previous entry for the inserted phoneme. // re-use the previous entry for the inserted phoneme.
// That's OK because we don't look backwards from plist3 *** but CountVowelPosiion() and isAfterStress does !!!
// That's OK because we don't look backwards from plist3 *** but CountVowelPosition() and isAfterStress does !!!
j--; j--;
plist3 = plist3_inserted = &ph_list3[j]; plist3 = plist3_inserted = &ph_list3[j];
if(j > 0) if(j > 0)
{ {
memcpy(&plist3[-1], &plist3[0], sizeof(*plist3));
// move all previous phonemes in the word back one place
int k;
if(word_start > 0)
{
k = word_start;
word_start--;
}
else
{
k = 2; // No more space, don't loose the start of word mark at ph_list2[word_start]
}
for(; k<=j; k++)
memcpy(&ph_list3[k-1], &ph_list3[k], sizeof(*plist3));
} }
memset(&plist3[0], 0, sizeof(*plist3)); memset(&plist3[0], 0, sizeof(*plist3));
plist3->phcode = insert_ph; plist3->phcode = insert_ph;


if(plist3->phcode == phonSWITCH) if(plist3->phcode == phonSWITCH)
{ {
if(!(plist3->synthflags & SFLAG_EMBEDDED)) // ?? phonSWITCH can't have SFLAG_EMBEDDED ??
{
if((plist3[1].phcode == phonSWITCH) || ((plist3[1].type == phPAUSE) && (plist3[2].phcode == phonSWITCH)))
continue; // next phoneme is also a phonSWITCH, so ignore
}

// change phoneme table // change phoneme table
SelectPhonemeTable(plist3->tone_ph); SelectPhonemeTable(plist3->tone_ph);
} }

+ 1
- 1
src/synthdata.cpp View File

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


const char *version_string = "1.46.48 13.Mar.13";
const char *version_string = "1.46.53 16.Mar.13";
const int version_phdata = 0x014640; const int version_phdata = 0x014640;


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

+ 1
- 1
src/synthesize.cpp View File

int ix; int ix;
static char buf[5]; static char buf[5];


for(ix=0; ix<3; ix++)
for(ix=0; ix<4; ix++)
buf[ix] = word >> (ix*8); buf[ix] = word >> (ix*8);
buf[4] = 0; buf[4] = 0;
return(buf); return(buf);

+ 7
- 3
src/tr_languages.cpp View File

static const short stress_lengths_sk[8] = {190,190, 210,210, 0,0, 210,210}; static const short stress_lengths_sk[8] = {190,190, 210,210, 0,0, 210,210};


static const short stress_lengths_ta[8] = {200, 200, 210, 210, 0, 0, 230, 230}; static const short stress_lengths_ta[8] = {200, 200, 210, 210, 0, 0, 230, 230};
static const short stress_lengths_ta2[8] = {230, 230, 240, 240, 0, 0, 260, 260};
static const unsigned char stress_amps_ta[8] = {18,18, 18,18, 20,20, 22,22 }; static const unsigned char stress_amps_ta[8] = {18,18, 18,18, 20,20, 22,22 };


// convert name string into a word of up to 4 characters, for the switch() // convert name string into a word of up to 4 characters, for the switch()
if(name2 == L('a','n')) if(name2 == L('a','n'))
{ {
tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2; tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.numbers2 = 0;
} }
else else
if(name2 == L_pap) if(name2 == L_pap)
case L('m','r'): // Marathi case L('m','r'): // Marathi
case L('t','e'): // Telugu case L('t','e'): // Telugu
{ {
SetupTranslator(tr,stress_lengths_ta,stress_amps_ta);
SetupTranslator(tr,stress_lengths_ta2, stress_amps_ta);
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable


tr->langopts.stress_rule = STRESSPOSN_1L; tr->langopts.stress_rule = STRESSPOSN_1L;


if(name2 == L('t','a')) if(name2 == L('t','a'))
{ {
SetupTranslator(tr,stress_lengths_ta, NULL);
tr->letter_bits_offset = OFFSET_TAMIL; tr->letter_bits_offset = OFFSET_TAMIL;
tr->langopts.numbers = NUM_OMIT_1_THOUSAND ; tr->langopts.numbers = NUM_OMIT_1_THOUSAND ;
tr->langopts.param[LOPT_WORD_MERGE] = 1; // don't break vowels betwen words
} }
else
if(name2 == L('m','r')) if(name2 == L('m','r'))
{ {
tr->letter_bits_offset = OFFSET_DEVANAGARI; tr->letter_bits_offset = OFFSET_DEVANAGARI;
tr->letter_bits_offset = OFFSET_TELUGU; tr->letter_bits_offset = OFFSET_TELUGU;
tr->langopts.numbers = 0x1; tr->langopts.numbers = 0x1;
} }
tr->langopts.param[LOPT_WORD_MERGE] = 1; // don't break vowels betwen words
SetIndicLetters(tr); // call this after setting OFFSET_ SetIndicLetters(tr); // call this after setting OFFSET_
SetLetterBitsRange(tr,LETTERGP_B,0x4e,0x4e); // chillu-virama (unofficial)
SetLetterBitsRange(tr,LETTERGP_B,0x4e,0x4e); // chillu-virama (unofficial)
} }
break; break;



+ 12
- 3
src/translate.cpp View File

char prefix_chars[0x3f + 2]; char prefix_chars[0x3f + 2];
int found=0; int found=0;
int end_flags; int end_flags;
char c_temp; // save a character byte while we temporarily replace it with space
int c_temp; // save a character byte while we temporarily replace it with space
int first_char; int first_char;
int last_char = 0; int last_char = 0;
int add_plural_suffix = 0; int add_plural_suffix = 0;
if((word_length == 1) && (wflags & FLAG_TRANSLATOR2)) if((word_length == 1) && (wflags & FLAG_TRANSLATOR2))
{ {
// retranslating a 1-character word using a different language, say its name // retranslating a 1-character word using a different language, say its name
spell_word = 1;
utf8_in(&c_temp, wordx+1); // the next character
if(!IsAlpha(c_temp) || (AlphabetFromChar(last_char) != AlphabetFromChar(c_temp)))
spell_word = 1;
} }


if(option_sayas == SAYAS_KEY) if(option_sayas == SAYAS_KEY)
{ {
if(word_length > 1) if(word_length > 1)
return(FLAG_SPELLWORD); // a mixture of languages, retranslate as individual letters, separated by spaces return(FLAG_SPELLWORD); // a mixture of languages, retranslate as individual letters, separated by spaces
if(phonemes[0] == phonSWITCH)
{
// problem with espeak -vbg "b.c.d.e.f"
}
return(0); return(0);
} }
strcpy(word_phonemes, phonemes); strcpy(word_phonemes, phonemes);
return(dictionary_flags[0] & FLAG_SKIPWORDS); // ??
if(wflags & FLAG_TRANSLATOR2)
return(0);
return(dictionary_flags[0] & FLAG_SKIPWORDS); // for "b.c.d"
} }
else if(found == 0) else if(found == 0)
{ {
if(ok) if(ok)
{ {
*p2 = '-'; // replace next space by hyphen *p2 = '-'; // replace next space by hyphen
wtab[0].flags &= ~FLAG_ALL_UPPER; // prevent it being considered an abbreviation
flags = TranslateWord(translator, word, next_pause, wtab, NULL); // translate the combined word flags = TranslateWord(translator, word, next_pause, wtab, NULL); // translate the combined word
if((sylimit > 0) && (CountSyllables(p) > (sylimit & 0x1f))) if((sylimit > 0) && (CountSyllables(p) > (sylimit & 0x1f)))
{ {

+ 1
- 1
src/voices.cpp View File

static const char *voices_asia = static const char *voices_asia =
"fa fa-pin hi hy hy-west id ka kn ku ml ne pa ta tr vi vi-hue zh zh-yue "; "fa fa-pin hi hy hy-west id ka kn ku ml ne pa ta tr vi vi-hue zh zh-yue ";
static const char *voices_europe = static const char *voices_europe =
"bg bs ca cs cy da el es et fi fr-be hr hu is it lt lv mk nl no pl pt-pt ro ru sk sq sr sv ";
"an bg bs ca cs cy da el es et fi fr-be hr hu is it lt lv mk nl no pl pt-pt ro ru sk sq sr sv ";




strncpy0(voicename, vname, sizeof(voicename)); strncpy0(voicename, vname, sizeof(voicename));

Loading…
Cancel
Save