Browse Source

[1.29.29] Add inital draft of language "ta", Tamil

lang=en: Don't treat "Mc" prefix as a separate word, combine it with the following word.


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@113 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 17 years ago
parent
commit
fb7230a912

+ 4
- 0
dictsource/dict_phonemes View File

tS v w z tS v w z




Dictionary ta_dict



Dictionary pt_dict Dictionary pt_dict


& &/ &U~ &~ @ @- a A & &/ &U~ &~ @ @- a A

+ 1
- 1
dictsource/en_list View File

irc $abbrev irc $abbrev
lbs paUndz lbs paUndz
ltd lImItId ltd lImItId
mc m@k
mc m@k $alt2 // combine with the following word
oem $abbrev oem $abbrev
ok $abbrev ok $abbrev
omg $abbrev omg $abbrev

+ 4
- 1
dictsource/en_rules View File

li) mb (e m li) mb (e m
o) mb (e m o) mb (e m
du) mb (e m du) mb (e m
_) m (c m@
_) mc m@k
_) mc (A mak
_) mc (-A mak
mn (_ m mn (_ m
_) mn n _) mn n
&B) me (_ mI2 &B) me (_ mI2
t) y (rann I t) y (rann I
ph) ys (i Iz ph) ys (i Iz
yr (_ @ yr (_ @
yre (_ aI3
c) y (ni I c) y (ni I
l) y (ri I l) y (ri I
p) y (ra I p) y (ra I

+ 1
- 31
dictsource/mk_list View File

_dpt _:z'api*k&_ _dpt _:z'api*k&_
_0and i _0and i


// Roman numerals
ii $abbrev
iii $abbrev
iv $abbrev
vii $abbrev
viii $abbrev
ix $abbrev
xi $abbrev
xii $abbrev
xiii $abbrev
xiv $abbrev
xvi $abbrev
xvii $abbrev
xviii $abbrev
xix $abbrev
xxi $abbrev
xxii $abbrev
xxiii $abbrev
xxiv $abbrev
xxvi $abbrev
xxvii $abbrev
xxviii $abbrev
xxix $abbrev
xxxi $abbrev
xxxii $abbrev
xxxiii $abbrev
xxxiv $abbrev
xxxvi $abbrev
xxxvii $abbrev
xxxviii $abbrev
xxxix $abbrev



// Abbreviations // Abbreviations



+ 4
- 0
dictsource/ta_list View File

// This file is UTF8 encoded
// Spelling to phoneme words and exceptions for Tamil


+ 173
- 0
dictsource/ta_rules View File


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

.replace
௦ 0 // Tamil numbers
௧ 1
௨ 2
௩ 3
௪ 4
௫ 5
௬ 6
௭ 7
௮ 8
௯ 9


.group 0xe0ae
ஂ // anusvara

ஃ // visarga

அ a

ஆ a:

இ i

ஈ i:

உ u

ஊ u:

எ e

ஏ e:

ஐ E:

ஒ o

ஓ o:

ஔ aU

// consonants

க ga // inter-vocalic, unless there is virama before or after
க (B g
க (் g
்) க ga
்) க (B g
_) க ka
_) க (B k
க்க ka
க்க (B k

ங Na
ங (B N

ச dZa
ச (B dZ
_) ச sa
_) ச (B s
ச்ச tSa
ச்ச (B tS

ஜ dZa
ஜ (B dZ

ஞ n^a
ஞ (B n^

ட d.a
ட (B d.
_) ட t.a
_) ட (B t.
ட்ட t.a
ட்ட (B t.

ண n.a
ண (B n.

த da
த (B d
_) த ta
_) த (B t
த்த ta
த்த (B t

ந na
ந (B n

ன na
ன (B n

ப ba
ப (B b
_) ப pa
_) ப (B p
ப்ப pa
ப்ப (B p

ம ma
ம (B m

ய ja
ய (B j

ர ra
ர (B r

ற Ra
ற (B R
ற் (ற t // RR -> tR

ல la
ல (B l

ள l/2a // this should be [l.] not [l/2]
ள (B l/2

ழ z.a
ழ (B z.

வ va
வ (B v

ஶ Sa
ஶ (B S

ஷ s.a
ஷ (B s.

ஸ sa
ஸ (B s

ஹ ha
ஹ (B h


// combining vowels

ா a:

ி i

.group 0xe0af
ீ i:

ு u

ூ u:

ெ e

ே e:

ை E:

ொ o

ோ o:

ௌ aU

் // virama

ௗ : // aU length mark

.group
$ dola

+ 1
- 1
espeak-data/voices/grc View File



stressLength 170 170 190 190 0 0 230 240 stressLength 170 170 190 190 0 0 230 240
dictrules 1 dictrules 1
words 1
words 3



+ 4
- 0
espeak-data/voices/ta View File

name tamil-test
language ta
gender male


+ 21
- 5
phsource/compile_report View File

41 phoneme tables
42 phoneme tables
new total new total
base 96 96 base 96 96
base2 24 115 base2 24 115
fr 34 118 fr 34 118
fr_ca 11 118 fr_ca 11 118
hi 50 132 hi 50 132
ta 12 134
hu 23 112 hu 23 112
nl 26 117 nl 26 117
pl 15 107 pl 15 107
cs 6 125 cs 6 125
hr 20 130 hr 20 130
mk 3 131 mk 3 131
sr 11 130
sr 14 130
ru 38 126 ru 38 126
it 17 118 it 17 118
la 21 114 la 21 114
[r] cy [r] cy
[r] nl [r] nl
[R] sk [R] sk
[r*] sr
[x] pt [x] pt
r3/r_trill2 [R] base r3/r_trill2 [R] base
[R] hr [R] hr
[r] nl [r] nl
r3/r_trill.wav [R2] base r3/r_trill.wav [R2] base
[R] sk [R] sk
[r*] sr
[x] pt [x] pt
r3/r_u [(u)] base r3/r_u [(u)] base
r3/rx [*] base r3/rx [*] base
[t] hu [t] hu
[t] pl [t] pl
[t] hr [t] hr
[t] sr
[t] ru [t] ru
[t;] ro [t;] ro
[t[] vi [t[] vi
ustop/ts_pzd2 [c] hi ustop/ts_pzd2 [c] hi
[c] hu [c] hu
ustop/t_sr [d] sr ustop/t_sr [d] sr
[t] sr
ustop/ts_rfx [ts.] zh ustop/ts_rfx [ts.] zh
ustop/ts_rfx_unasp [ts.] zh ustop/ts_rfx_unasp [ts.] zh
ustop/ts_sr.wav [tS;] sr ustop/ts_sr.wav [tS;] sr
[a] zh [a] zh
vowel/a# [a/] base2 vowel/a# [a/] base2
[a2] en_sc [a2] en_sc
[&] sr
[&] pt [&] pt
[&/] pt [&/] pt
[a2] en_wi [a2] en_wi
[A:] en_wi [A:] en_wi
[A@] en_wi [A@] en_wi
[aa] en_wi [aa] en_wi
vowel/a#_2 [&] hr
vowel/a#_2 [a] ta
[&] hr
[a2] sv [a2] sv
[&] is [&] is
[a/] sw [a/] sw
[a] sw [a] sw
vowel/aa [a] fi vowel/aa [a] fi
[A] fr_ca [A] fr_ca
[a:] ta
[A] no [A] no
[A:] no [A:] no
[aa] zhy [aa] zhy
[e] eo [e] eo
[e] fr [e] fr
[E:] fr [E:] fr
[e] ta
[e:] ta
[e] hr [e] hr
[e/] it [e/] it
[e:] la [e:] la
[i:] cy [i:] cy
[i] eo [i] eo
[I] fr [I] fr
[i:] ta
[i:] hu [i:] hu
[i] pl [i] pl
[i] it [i] it
[i/] pt_pt [i/] pt_pt
[y] ro [y] ro
vowel/i_6 [i:] en_us vowel/i_6 [i:] en_us
[i] ta
[i] hr [i] hr
vowel/i_en [i:] en vowel/i_en [i:] en
[i] vi [i] vi
[I2] en_wi [I2] en_wi
vowel/ii_6 [I] en_wm vowel/ii_6 [I] en_wm
[I2] en_wm [I2] en_wm
[I] sr
vowel/ii_en [i] en vowel/ii_en [i] en
vowel/@_low [3] en_rp vowel/@_low [3] en_rp
[@] en_rp [@] en_rp
[o:] en [o:] en
[o:] de [o:] de
[o] hi [o] hi
[o] ta
[o:] ta
[o] it [o] it
[o/] it [o/] it
[o:] la [o:] la
[u] sk [u] sk
[U] hr [U] hr
[u] ro [u] ro
vowel/u#_2 [u-] sv
vowel/u#_2 [u-] ta
[u-] sv
vowel/u_3 [yU] ro vowel/u_3 [yU] ro
vowel/u_4 [u:] en_n vowel/u_4 [u:] en_n
vowel/u#_4 [U] en_sc vowel/u#_4 [U] en_sc
[u] fi [u] fi
[u] fr_ca [u] fr_ca
[u:] hi [u:] hi
[u:] ta
[u:] hu [u:] hu
[u] nl [u] nl
[u] pl [u] pl
vowel/uu_bck [U] en_n vowel/uu_bck [U] en_n
[U] fr_ca [U] fr_ca
[U] hi [U] hi
[u] ta
[u] hu [u] hu
[U] pt [U] pt
[U] no [U] no

+ 35
- 8
phsource/ph_serbian View File

// Only phonemes which differ from the inherited phonemes need // Only phonemes which differ from the inherited phonemes need
// to be included here. // to be included here.


phoneme I
vowel starttype (i) endtype (i)
length 120
formants vowel/ii_6
linkout ;
endphoneme


phoneme &
vowel starttype (a) endtype (a)
length 140
formants vowel/a#
endphoneme


phoneme r* // this is [R] from Slovak/Czech
liquid
vowelin f1=0 f2=1700 -300 300 f3=-300 80
vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk
formants r3/r_trill+r3/r_trill.wav%50
trill
lengthmod 6
endphoneme




phoneme t // dental variant of /t/ phoneme t // dental variant of /t/
vls dnt stop vls dnt stop
vowelin f1=0 f2=1600 -300 300 f3=-100 80 vowelin f1=0 f2=1600 -300 300 f3=-100 80
vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20
lengthmod 2 lengthmod 2
wave ustop/t_sr%50
before _ ustop/t_sr%35
wave ustop/t_dnt%50
before _ ustop/t_dnt%50
switchvoicing d switchvoicing d
endphoneme endphoneme


vls pla afr sibilant vls pla afr sibilant
vowelin f1=0 f2=2300 200 400 f3=-100 80 vowelin f1=0 f2=2300 200 400 f3=-100 80
lengthmod 2 lengthmod 2
wave ustop/tsh_sr.wav
before _ ustop/tsh_sr.wav
wave ustop/tsh_sr.wav%50
before _ ustop/tsh_sr.wav%50
switchvoicing dZ switchvoicing dZ
endphoneme endphoneme


endphoneme endphoneme






phoneme Z phoneme Z
vcd pla frc sibilant vcd pla frc sibilant
vowelin f1=0 f2=2000 0 300 f3=-200 80 vowelin f1=0 f2=2000 0 300 f3=-200 80
vowelout f1=2 f2=2000 0 300 f3=-200 80 brk vowelout f1=2 f2=2000 0 300 f3=-200 80 brk
formants voc/zh+ufric/sh_sr.wav
before _ voc/zh+ufric/sh_sr.wav
formants voc/zh+ufric/sh_sr.wav%60
before _ voc/zh+ufric/sh_sr.wav%50
lengthmod 6 lengthmod 6
switchvoicing S switchvoicing S
endphoneme endphoneme
vowelout f1=0 f2=2100 100 300 f3=-100 80 vowelout f1=0 f2=2100 100 300 f3=-100 80
length 100 length 100
lengthmod 3 lengthmod 3
wave ufric/sh_sr.wav
before _ ufric/sh_sr.wav
wave ufric/sh_sr.wav%70
before _ ufric/sh_sr.wav%60
switchvoicing Z switchvoicing Z
endphoneme endphoneme



+ 84
- 0
phsource/ph_tamil View File


// Phonemes for Tamil
// This inherits from ph_hindi



phoneme a
vowel starttype (@) endtype (@)
length 130
formants vowel/a#_2
endphoneme


phoneme a:
vowel starttype (a) endtype (a)
length 270
formants vowel/aa
endphoneme


phoneme e
vowel starttype (e) endtype (e)
length 130
formants vowel/e
endphoneme


phoneme e:
vowel starttype (e) endtype (e)
length 270
formants vowel/e
endphoneme


phoneme i
vowel starttype (i) endtype (i)
length 130
formants vowel/i_6
endphoneme


phoneme i:
vowel starttype (i) endtype (i)
length 270
formants vowel/i
endphoneme



phoneme o
vowel starttype (o) endtype (o)
length 130
formants vowel/o
endphoneme


phoneme o:
vowel starttype (o) endtype (o)
length 270
formants vowel/o
endphoneme


phoneme u
vowel starttype (u) endtype (u)
length 130
formants vowel/uu_bck
endphoneme


phoneme u:
vowel starttype (u) endtype (u)
length 270
formants vowel/u_bck
endphoneme


phoneme u-
vowel starttype (u) endtype (u)
length 130
formants vowel/u#_2
endphoneme



+ 407
- 0
phsource/ph_zh View File

//based on "phonemes"
//====================================================
// Tone Numbers
//====================================================

phoneme 11 // tone: low level
stress
tone 15 10 envelope/p_fall NULL
endphoneme

phoneme 21 // tone: low fall
stress
tone 20 10 envelope/p_fall NULL
endphoneme

phoneme 214 // tone: fall rise
stress
tone 20 40 envelope/p_214 NULL
endphoneme

phoneme 22 // tone: mid-low level
stress
tone 21 19 envelope/p_fall NULL
endphoneme

phoneme 33 // tone: mid level
stress
tone 31 29 envelope/p_fall NULL
endphoneme

phoneme 35 // tone: mid rise
stress
tone 30 50 envelope/p_rise NULL
endphoneme

phoneme 44 // tone: mid-high level
stress
tone 41 39 envelope/p_level NULL
endphoneme

phoneme 51 // tone: high fall
stress
tone 50 10 envelope/p_fall NULL
endphoneme

phoneme 53 // tone: high fall
stress
tone 50 30 envelope/p_fall NULL
endphoneme

phoneme 55 // tone: high level
stress
tone 50 50 envelope/p_level NULL
endphoneme

//====================================================
// Consonants
//====================================================

phoneme p
vls blb stop
vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22
lengthmod 2
wave ustop/p_unasp
endphoneme

phoneme ph
vls blb stop
vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22
lengthmod 2
wave ustop/p_
endphoneme

phoneme m //not clear before some vowel
vcd blb nasal
vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk
lengthmod 2
formants m/_m
endphoneme

phoneme f //not clear before some vowel
vls lbd frc
vowelout f1=0 f2=1000 -500 -350 f3=-200 80
lengthmod 2
wave ufric/f
endphoneme

phoneme t
vls alv stop
vowelin f1=0 f2=1700 -300 300 f3=-100 80
vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
lengthmod 2
wave ustop/t_unasp
endphoneme

phoneme th
vls alv stop
vowelin f1=0 f2=1700 -300 300 f3=-100 80
vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
lengthmod 2
wave ustop/t_
endphoneme

phoneme n
vcd alv nasal
vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk
length 30
lengthmod 2
formants n/_n
before _ n/n_
before (i) n/ni
endphoneme

phoneme l
liquid
vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=20
lengthmod 2
formants l/_l
before (i) l/li
endphoneme

phoneme k
vls uvl stop
vowelin f1=1 f2=1700 0 200 f3=-300 80 f4
vowelout f1=1 f2=1700 0 200 f3=-300 80 f4 rms=30
lengthmod 2
wave ustop/k_unasp_
endphoneme

phoneme kh
vls uvl stop
vowelin f1=1 f2=1700 0 200 f3=-300 80 f4
vowelout f1=1 f2=1700 0 200 f3=-300 80 f4 rms=30
lengthmod 2
wave ustop/k_
endphoneme

phoneme tS;
vls pal afr sibilant palatal
vowelin f1=0 f2=2700 400 600 f3=300 80
lengthmod 2
wave ustop/tsh_pzd_unasp
endphoneme

phoneme tS;h
vls pal afr sibilant palatal
vowelin f1=0 f2=2700 400 600 f3=300 80
lengthmod 2
wave ustop/tsh_pzd
endphoneme

phoneme S;
vls pla frc sibilant
vowelin f1=0 f2=2700 400 600 f3=300 80
lengthmod 2
wave ufric/sh_pzd
endphoneme

phoneme ts
vls alv afr sibilant
vowelin f1=0 f2=1700 -300 300 f3=-100 80
vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
lengthmod 2
wave ustop/ts_unasp
endphoneme

phoneme tsh
vls alv afr sibilant
vowelin f1=0 f2=1700 -300 300 f3=-100 80
vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
lengthmod 2
wave ustop/ts
endphoneme

phoneme ts.
vls pla frc sibilant
vowelin f1=0 f2=1800 -100 300 f3=-300 80
vowelout f1=0 f2=1800 -100 300 f3=-300 80
length 100
lengthmod 3
wave ustop/ts_rfx_unasp
endphoneme

phoneme ts.h
vls pla frc sibilant
vowelin f1=0 f2=1800 -100 300 f3=-300 80
vowelout f1=0 f2=1800 -100 300 f3=-300 80
length 100
lengthmod 3
wave ustop/ts_rfx
endphoneme

phoneme j
liquid
palatal
length 40
formants j/_j
lengthmod 1
endphoneme

phoneme w
liquid
length 40
lengthmod 1
formants w/_w
endphoneme

//====================================================
// Vowels and Diphtnongs
//====================================================

phoneme N //should be more different from n
vcd vel nasal
length 10
formants NULL
before _ nn/nn_
after _ nn/_nn
lengthmod 1
after (i) nn/inn
endphoneme

phoneme a
vowel starttype (a) endtype (a)
length 250
formants vowel/a
endphoneme

phoneme A
vowel starttype (a) endtype (a)
length 250
formants vowel/aa
before N vowel/aa_2
endphoneme

phoneme ai
vowel starttype (a) endtype (i)
length 250
formants vdiph/ae
endphoneme

phoneme Au
vowel starttype (a) endtype (u)
length 250
formants vwl_zh/aau
endphoneme

phoneme @
vowel starttype (@) endtype (@)
length 230
formants vowel/3_2%120
before N vowel/@_bck
endphoneme

phoneme @r //tmp use V3_r
vowel starttype (@) endtype (@)
length 250
formants vowelr/V3_r
endphoneme

phoneme E
vowel starttype (e) endtype (e)
length 250
formants vowel/ee_2
endphoneme

phoneme ei
vowel starttype (e) endtype (i)
length 250
formants vdiph/ei
endphoneme

phoneme i
vowel starttype (i) endtype (i)
length 250
formants vowel/i
before N vowel/ii_2
endphoneme

phoneme i[ //after ts tsh s
vowel starttype (i) endtype (i)
length 250
formants vwl_zh/i_dnt
endphoneme

phoneme i. //after ts. ts.h s. z.
vowel starttype (i) endtype (i)
length 250
formants vwl_zh/i_rfx
endphoneme

phoneme iA //try more before N
vowel starttype (i) endtype (a)
length 250
formants vwl_zh/iaa
endphoneme

phoneme iAu
vowel starttype (i) endtype (u)
length 250
formants vwl_zh/iaau
endphoneme

phoneme iE
vowel starttype (i) endtype (e)
length 250
formants vwl_zh/iee
endphoneme

phoneme io
vowel starttype (i) endtype (o)
length 250
formants vdiph2/iioo
endphoneme

phoneme iou
vowel starttype (i) endtype (u)
length 250
formants vwl_zh/iou
endphoneme

phoneme o
vowel starttype (o) endtype (o)
length 250
formants vowel/o
endphoneme

phoneme o-
vowel starttype (o) endtype (o)
length 250
formants vowel/o-
endphoneme

phoneme ou
vowel starttype (o) endtype (u)
length 250
formants vdiph/8u
endphoneme

phoneme u //try more before N
vowel starttype (u) endtype (u)
length 250
formants vowel/u
before N vowel/o
endphoneme

phoneme uA
vowel starttype (u) endtype (a)
length 250
formants vwl_zh/uaa
endphoneme

phoneme ua
vowel starttype (u) endtype (a)
length 250
formants vdiph2/oa
endphoneme

phoneme uai
vowel starttype (u) endtype (i)
length 250
formants vwl_zh/uai
endphoneme

phoneme u@
vowel starttype (u) endtype (@)
length 250
formants vdiph2/o@
endphoneme

phoneme uei
vowel starttype (u) endtype (i)
length 250
formants vwl_zh/uei
endphoneme

phoneme uo
vowel starttype (u) endtype (o)
length 250
formants vwl_zh/uo
endphoneme

phoneme y //try more before N
vowel starttype (i) endtype (u)
length 250
formants vowel/y
before N vdiph2/yu
endphoneme

phoneme y&
vowel starttype (i) endtype (e)
length 250
formants vwl_zh/y&
endphoneme

phoneme yE //try more so not similar to iE
vowel starttype (i) endtype (e)
length 250
formants vwl_zh/yee
endphoneme

phoneme y@
vowel starttype (i) endtype (@)
length 250
formants vdiph2/y#@
endphoneme

+ 3
- 0
phsource/phonemes View File

phonemetable hi base phonemetable hi base
include ph_hindi include ph_hindi


phonemetable ta hi
include ph_tamil

phonemetable hu base phonemetable hu base
include ph_hungarian include ph_hungarian



BIN
phsource/ufric/sh_sr.wav View File


BIN
phsource/vowel/a#_2 View File


+ 17
- 14
src/dictionary.cpp View File

int done; int done;


unsigned char vowel_stress[N_WORD_PHONEMES/2]; unsigned char vowel_stress[N_WORD_PHONEMES/2];
char syllable_type[N_WORD_PHONEMES/2];
char syllable_weight[N_WORD_PHONEMES/2];
unsigned char phonetic[N_WORD_PHONEMES]; unsigned char phonetic[N_WORD_PHONEMES];


static char consonant_types[16] = {0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0}; static char consonant_types[16] = {0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0};
// followed by two consonants, a long consonant, or consonant and end-of-word // followed by two consonants, a long consonant, or consonant and end-of-word
weight++; weight++;
} }
syllable_type[ix] = weight;
syllable_weight[ix] = weight;
ix++; ix++;
} }
} }
{ {
int wt; int wt;
int max_weight = -1; int max_weight = -1;
int min_weight = 10;
int prev_stressed; int prev_stressed;


for(ix = 1; ix < vowel_count; ix++)
// find the heaviest syllable, excluding the final syllable
for(ix = 1; ix < (vowel_count-1); ix++)
{ {
if(vowel_stress[ix] == 0) if(vowel_stress[ix] == 0)
{ {
if((wt = syllable_type[ix]) < min_weight)
min_weight = wt;
if(wt >= max_weight)
if((wt = syllable_weight[ix]) >= max_weight)
{ {
max_weight = wt; max_weight = wt;
prev_stressed = stressed_syllable; prev_stressed = stressed_syllable;
} }
} }
} }
if(max_weight > min_weight)

if((syllable_weight[vowel_count-1] == 2) && (max_weight< 2))
{ {
// different weights, don't stress the final syllable
if((stressed_syllable == vowel_count-1) && (syllable_type[vowel_count-2] > 0))
{
stressed_syllable = vowel_count-2;
}
// the only double=heavy syllable is the final syllable, so stress this
stressed_syllable = vowel_count-1;
}
else
if(max_weight <= 0)
{
// all syllables, exclusing the last, are light. Stress the first syllable
stressed_syllable = 1;
} }

vowel_stress[stressed_syllable] = 4; vowel_stress[stressed_syllable] = 4;
max_stress = 4; max_stress = 4;
} }
if((stress == 3) && (langopts.stress_flags & 0x20)) if((stress == 3) && (langopts.stress_flags & 0x20))
continue; // don't use secondary stress continue; // don't use secondary stress


if((v > 1) && (langopts.stress_flags & 0x40) && (syllable_type[v]==0) && (syllable_type[v+1]>0))
if((v > 1) && (langopts.stress_flags & 0x40) && (syllable_weight[v]==0) && (syllable_weight[v+1]>0))
{ {
// don't put secondary stress on a light syllable which is followed by a heavy syllable // don't put secondary stress on a light syllable which is followed by a heavy syllable
continue; continue;

+ 10
- 5
src/intonation.cpp View File

short pitch2; short pitch2;
} SYLLABLE; } SYLLABLE;


SYLLABLE syllable_tab[N_PHONEME_LIST];
SYLLABLE *syllable_tab;




static int tone_pitch_env; /* used to return pitch envelope */ static int tone_pitch_env; /* used to return pitch envelope */
static short oflow[] = {0, 20, 12, 4, 0}; static short oflow[] = {0, 20, 12, 4, 0};
static short oflow_emf[] = {5, 24, 15, 10, 5}; static short oflow_emf[] = {5, 24, 15, 10, 5};
static short oflow_less[] = {1, 17, 10, 5, 1}; static short oflow_less[] = {1, 17, 10, 5, 1};
static short back_emf[] = {36, 32, 0};
static short back_emf[] = {35, 32, 0};


typedef struct { typedef struct {
unsigned char pitch_env0; /* pitch envelope, tonic syllable at end */ unsigned char pitch_env0; /* pitch envelope, tonic syllable at end */
20, 25, 34, 20, drops_0, 3, 3, 5, oflow, NULL, 15, 29, 0}, 20, 25, 34, 20, drops_0, 3, 3, 5, oflow, NULL, 15, 29, 0},


{PITCHfall, 41, 4, PITCHfall, 41, 27, // exclamation {PITCHfall, 41, 4, PITCHfall, 41, 27, // exclamation
20, 25, 34, 24, drops_0, 3, 4, 5, oflow_emf, back_emf, 18, 5, 0},
20, 25, 34, 24, drops_0, 3, 4, 5, oflow_emf, back_emf, 16, 5, 0},


{PITCHfall, 38, 2, PITCHfall, 42, 30, // statement, emphatic {PITCHfall, 38, 2, PITCHfall, 42, 30, // statement, emphatic
20, 25, 34, 22, drops_0, 3, 3, 5, oflow, NULL, 15, 5, 0}, 20, 25, 34, 22, drops_0, 3, 3, 5, oflow, NULL, 15, 5, 0},


if(no_tonic) if(no_tonic)
{ {
tone_posn = tone_posn2 = end-1;
tone_posn = tone_posn2 = end; // next position after the end of the truncated clause
} }
else else
if(last_primary >= 0) if(last_primary >= 0)
int count_primary; int count_primary;
int ph_end=n_phoneme_list; int ph_end=n_phoneme_list;


SYLLABLE syllable_tab2[N_PHONEME_LIST];

syllable_tab = syllable_tab2; // don't use permanent storage. it's only needed during the call of CalcPitches()

if(langopts.intonation == 1) if(langopts.intonation == 1)
{ {
CalcPitches_Tone(clause_type); CalcPitches_Tone(clause_type);
option = 0; option = 0;


group_tone_emph = group_tone = punct_to_tone[option][clause_type]; group_tone_emph = group_tone = punct_to_tone[option][clause_type];
group_tone_emph = punct_to_tone[option][4]; // emphatic form of statement
group_tone_emph = punct_to_tone[option][5]; // emphatic form of statement


if(clause_type == 4) if(clause_type == 4)
no_tonic = 1; /* incomplete clause, used for abbreviations such as Mr. Dr. Mrs. */ no_tonic = 1; /* incomplete clause, used for abbreviations such as Mr. Dr. Mrs. */
if(p->synthflags & SFLAG_SYLLABLE) if(p->synthflags & SFLAG_SYLLABLE)
{ {
syllable_tab[n_st].flags = 0; syllable_tab[n_st].flags = 0;
syllable_tab[n_st].env = PITCHfall;
syllable_tab[n_st++].stress = p->tone; // stress level syllable_tab[n_st++].stress = p->tone; // stress level


if(p->tone >= 4) if(p->tone >= 4)

+ 2
- 9
src/readclause.cpp View File

} }
ix += utf8_out(c1,&buf[ix]); // buf[ix++] = c1; ix += utf8_out(c1,&buf[ix]); // buf[ix++] = c1;


if(!iswalnum(c1) && (ix > (n_buf-20)))
if(((ix > (n_buf-20)) && !IsAlpha(c1) && !iswdigit(c1)) || (ix >= (n_buf-2)))
{ {
// clause too long, getting near end of buffer, so break here // clause too long, getting near end of buffer, so break here
// try to break at a word boundary (unless we actually reach the end of buffer).
buf[ix] = ' '; buf[ix] = ' ';
buf[ix+1] = 0; buf[ix+1] = 0;
UngetC(c2); UngetC(c2);
return(CLAUSE_NONE); return(CLAUSE_NONE);
} }
if(ix >= (n_buf-2))
{
// reached end of buffer, must break now
buf[n_buf-2] = ' ';
buf[n_buf-1] = 0;
UngetC(c2);
return(CLAUSE_NONE);
}
} }
buf[ix] = ' '; buf[ix] = ' ';
buf[ix+1] = 0; buf[ix+1] = 0;

+ 1
- 1
src/synthdata.cpp View File

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


const char *version_string = "1.29.26 18.Dec.07";
const char *version_string = "1.29.29 20.Dec.07";
const int version_phdata = 0x012924; const int version_phdata = 0x012924;


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

+ 0
- 3
src/synthesize.cpp View File

#include "voice.h" #include "voice.h"
#include "translate.h" #include "translate.h"


#define PITCHfall 0
#define PITCHrise 1



extern FILE *f_log; extern FILE *f_log;
static void SmoothSpect(void); static void SmoothSpect(void);

+ 1
- 1
src/synthesize.h View File

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




#define N_PHONEME_LIST 700 // enough for source[] full of text, else it will truncate
#define N_PHONEME_LIST 1000 // enough for source[N_TR_SOURCE] full of text, else it will truncate


#define MAX_HARMONIC 400 // 400 * 50Hz = 20 kHz, more than enough #define MAX_HARMONIC 400 // 400 * 50Hz = 20 kHz, more than enough
#define N_SEQ_FRAMES 25 // max frames in a spectrum sequence (real max is ablut 8) #define N_SEQ_FRAMES 25 // max frames in a spectrum sequence (real max is ablut 8)

+ 2
- 1
src/tr_english.cpp View File

langopts.stress_rule = 0; langopts.stress_rule = 0;


langopts.numbers = 0x41 + NUM_ROMAN; langopts.numbers = 0x41 + NUM_ROMAN;
langopts.param[LOPT_COMBINE_WORDS] = 5; // allow "mc" to cmbine with the following word
} }




0x20, 0x24, 0x20, 0x80, 0x10, 0x00, 0x00, 0x00, 0x20, 0x24, 0x20, 0x80, 0x10, 0x00, 0x00, 0x00,
0x00, 0x28, 0x08, 0x00, 0x88, 0x22, 0x04, 0x00, // 16 0x00, 0x28, 0x08, 0x00, 0x88, 0x22, 0x04, 0x00, // 16
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x88, 0x22, 0x04, 0x00, 0x02, 0x00, 0x00, // 32
0x00, 0x88, 0x22, 0x04, 0x00, 0x02, 0x00, 0x04, // 32
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x28, 0x8a, 0x03, 0x00, 0x00, 0x40, 0x00, // 48 0x00, 0x28, 0x8a, 0x03, 0x00, 0x00, 0x40, 0x00, // 48
0x02, 0x00, 0x41, 0xca, 0x9b, 0x06, 0x20, 0x80, 0x02, 0x00, 0x41, 0xca, 0x9b, 0x06, 0x20, 0x80,

+ 32
- 2
src/tr_languages.cpp View File

#define OFFSET_GREEK 0x380 #define OFFSET_GREEK 0x380
#define OFFSET_CYRILLIC 0x420 #define OFFSET_CYRILLIC 0x420
#define OFFSET_DEVANAGARI 0x900 #define OFFSET_DEVANAGARI 0x900
#define OFFSET_TAMIL 0xb80




static const unsigned int replace_cyrillic_latin[] = static const unsigned int replace_cyrillic_latin[] =
tr->charset_a0 = charsets[19]; // ISCII tr->charset_a0 = charsets[19]; // ISCII
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 = 6; // stress on last heaviest syllable
tr->langopts.stress_rule = 6; // stress on last heaviest syllable, excluding final syllable
tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable
tr->langopts.numbers = 0x811; tr->langopts.numbers = 0x811;
tr->langopts.numbers2 = 0x100; tr->langopts.numbers2 = 0x100;
{ {
static const unsigned char stress_amps_hr[8] = {16,16, 20,20, 20,24, 24,22 }; static const unsigned char stress_amps_hr[8] = {16,16, 20,20, 20,24, 24,22 };
static const short stress_lengths_hr[8] = {180,160, 200,200, 0,0, 220,230}; static const short stress_lengths_hr[8] = {180,160, 200,200, 0,0, 220,230};
static const short stress_lengths_sr[8] = {160,150, 200,200, 0,0, 250,260};


tr = new Translator(); tr = new Translator();
SetupTranslator(tr,stress_lengths_hr,stress_amps_hr);

if(name2 == L('s','r'))
SetupTranslator(tr,stress_lengths_sr,stress_amps_hr);
else
SetupTranslator(tr,stress_lengths_hr,stress_amps_hr);
tr->charset_a0 = charsets[2]; // ISO-8859-2 tr->charset_a0 = charsets[2]; // ISO-8859-2


tr->langopts.stress_rule = 0; tr->langopts.stress_rule = 0;
} }
break; break;


case L('t','a'):
{
static const short stress_lengths_ta[8] = {190, 190, 210, 210, 0, 0, 230, 250};
static const unsigned char stress_amps_ta[8] = {17,14, 20,19, 20,24, 24,22 };

tr = new Translator();
SetupTranslator(tr,stress_lengths_ta,stress_amps_ta);
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable

tr->langopts.stress_rule = 6; // stress on last heaviest syllable, excluding final syllable
tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable
tr->langopts.numbers = 0x811;
tr->langopts.numbers2 = 0x100;
tr->letter_bits_offset = OFFSET_TAMIL;

memset(tr->letter_bits,0,sizeof(tr->letter_bits));
SetLetterBitsRange(tr,LETTERGP_A,0x05,0x14); // vowel letters
SetLetterBitsRange(tr,LETTERGP_A,0x3e,0x4c); // vowel signs
SetLetterBitsRange(tr,LETTERGP_B,0x3e,0x4d); // vowel signs, and virama
SetLetterBitsRange(tr,LETTERGP_C,0x15,0x39); // the main consonant range
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
}
break;

case L('t','r'): // Turkish case L('t','r'): // Turkish
{ {
static const unsigned char stress_amps_tr[8] = {16,16, 20,20, 20,24, 24,22 }; static const unsigned char stress_amps_tr[8] = {16,16, 20,20, 20,24, 24,22 };

+ 11
- 8
src/translate.cpp View File

static int embedded_read; static int embedded_read;
unsigned int embedded_list[N_EMBEDDED_LIST]; unsigned int embedded_list[N_EMBEDDED_LIST];


// the source text of a single clause
#define N_TR_SOURCE 350
// the source text of a single clause (UTF8 bytes)
#define N_TR_SOURCE 700
static char source[N_TR_SOURCE+40]; // extra space for embedded command & voice change info at end static char source[N_TR_SOURCE+40]; // extra space for embedded command & voice change info at end


int n_replace_phonemes; int n_replace_phonemes;
}; };




/* index by 0=. 1=, 2=?, 3=! 4=none */
static unsigned char punctuation_to_tone[4][5] = {
{0,1,2,3,4},
{5,6,2,0,4},
{0,1,2,3,0},
{0,1,2,3,0} };
/* index by 0=. 1=, 2=?, 3=! 4=none, 5=emphasized */
static unsigned char punctuation_to_tone[4][6] = {
{0,1,2,3,0,4},
{5,6,2,0,0,4},
{0,1,2,3,0,0},
{0,1,2,3,0,0} };




void SetLengthMods(Translator *tr, int value) void SetLengthMods(Translator *tr, int value)
if((c >= 0x901) && (c <= 0x957)) if((c >= 0x901) && (c <= 0x957))
return(1); // Devanagari vowel signs and other signs return(1); // Devanagari vowel signs and other signs


if((c >= 0xb81) && (c <= 0xbe5))
return(1); // Devanagari vowel signs and other signs

if((c >= 0x300) && (c <= 0x36f)) if((c >= 0x300) && (c <= 0x36f))
return(1); // combining accents return(1); // combining accents



+ 1
- 1
src/translate.h View File



#define N_WORD_PHONEMES 160 // max phonemes in a word #define N_WORD_PHONEMES 160 // max phonemes in a word
#define N_WORD_BYTES 160 // max bytes for the UTF8 characters in a word #define N_WORD_BYTES 160 // max bytes for the UTF8 characters in a word
#define N_CLAUSE_WORDS 256 // max words in a clause
#define N_CLAUSE_WORDS 300 // max words in a clause
#define N_RULE_GROUP2 120 // max num of two-letter rule chains #define N_RULE_GROUP2 120 // max num of two-letter rule chains
#define N_HASH_DICT 1024 #define N_HASH_DICT 1024
#define N_CHARSETS 20 #define N_CHARSETS 20

Loading…
Cancel
Save