lang=hu, shorten "ll". Test: remove differences in vowel lengths depending on the following phoneme. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@64 d46cf337-b52f-0410-862d-fd96e6ae7743master
@@ -2,148 +2,151 @@ | |||
// This file is UTF-8 encoded | |||
// Letters | |||
_a a: | |||
á dl'oUhe:,a: | |||
b be: | |||
c tse: | |||
č tSe: | |||
ch xa: | |||
d de: | |||
ď Je: | |||
e e: | |||
é dl'oUhe:,e: | |||
ě ije | |||
f ef | |||
g ge: | |||
h ha: | |||
_i i: | |||
í dl'oUhe:,i: | |||
j je: | |||
_k ka: | |||
l el | |||
ľ el^ | |||
ĺ dl'oUhe:,el | |||
m em | |||
n en | |||
ň en^ | |||
_o o: | |||
ó dl'oUhe:,o: | |||
ô uo: | |||
p pe: | |||
q kve: | |||
r eR | |||
ř eR^ | |||
_s es | |||
š eS | |||
t te: | |||
ť ce: | |||
u u: | |||
ú dl'oUhe:,u: | |||
ů 'u:s_kR'oUZkem | |||
_v ve: | |||
w dv'ojve: | |||
x iks | |||
y ipsilon | |||
ý dl'oUe:,ipsilon | |||
_z zet | |||
ž Zet | |||
: dv'ojtetSka | |||
% pRotsento | |||
+ plus | |||
€ eURo | |||
@ zavina:tS | |||
& ampr-sent | |||
# gR^i:Zek | |||
/ lomeno | |||
\\ beksleS | |||
! vigR^itSn^i:k | |||
° stupen^ | |||
× kRa:t | |||
÷ Jeleno | |||
§ paRagRaf | |||
~ tilda | |||
^ zdR^i:Ska | |||
© k'opiRajt | |||
_$ dola:R | |||
_' apostRof | |||
_" uvozovki | |||
_, tSa:Rka | |||
_- mi:nus | |||
_; zdR^edn^i:k | |||
_= Rovno | |||
_* hvjezJitSka | |||
_? otazn^i:k | |||
__ pottr-Zen^i: | |||
_` 'obRa:ts,ena:||tS'a:Rka | |||
_( za:voRka | |||
_) za:vorkazavR^i:t | |||
_[ hR'anata:||z'a:voRka | |||
_] hR'anata:||z'avR^i:t | |||
_{ sl'oZena:||z'a:voRka | |||
_} sl'oZena:||z'avR^i:t | |||
_< menSi: | |||
_> vjetSi: | |||
_| sv'isla:||tS'a:Ra | |||
_?? simbol | |||
_?A znak | |||
_a a: | |||
á dl'oUhe:,a: | |||
b be: | |||
c tse: | |||
č tSe: | |||
ch xa: | |||
d de: | |||
ď Je: | |||
e e: | |||
é dl'oUhe:,e: | |||
ě ije | |||
f ef | |||
g ge: | |||
h ha: | |||
_i i: | |||
í dl'oUhe:,i: | |||
j je: | |||
_k ka: | |||
l el | |||
ľ el^ | |||
ĺ dl'oUhe:,el | |||
m em | |||
n en | |||
ň en^ | |||
_o o: | |||
ó dl'oUhe:,o: | |||
ô uo: | |||
p pe: | |||
q kve: | |||
r eR | |||
ř eR^ | |||
_s es | |||
š eS | |||
t te: | |||
ť ce: | |||
u u: | |||
ú dl'oUhe:,u: | |||
ů 'u:s_kR'oUZkem | |||
_v ve: | |||
w dv'ojve: | |||
x iks | |||
y ipsilon | |||
ý dl'oUe:,ipsilon | |||
_z zet | |||
ž Zet | |||
: dv'ojtetSka | |||
% pRotsento | |||
+ plus | |||
€ eURo | |||
@ zavina:tS | |||
& ampr-sent | |||
# gR^i:Zek | |||
/ lomeno | |||
\\ beksleS | |||
! vigR^itSn^i:k | |||
° stupen^ | |||
× kRa:t | |||
÷ Jeleno | |||
§ paRagRaf | |||
~ tilda | |||
^ zdR^i:Ska | |||
© k'opiRajt | |||
_#9 t'ap | |||
_#32 m'ezeRa // space | |||
_$ dola:R | |||
_' apostRof | |||
_" uvozovki | |||
_, tSa:Rka | |||
_- mi:nus | |||
_; zdR^edn^i:k | |||
_= Rovno | |||
_* hvjezJitSka | |||
_? otazn^i:k | |||
__ pottr-Zen^i: | |||
_` 'obRa:ts,ena:||tS'a:Rka | |||
_( za:voRka | |||
_) za:vorkazavR^i:t | |||
_[ hR'anata:||z'a:voRka | |||
_] hR'anata:||z'avR^i:t | |||
_{ sl'oZena:||z'a:voRka | |||
_} sl'oZena:||z'avR^i:t | |||
_< menSi: | |||
_> vjetSi: | |||
_| sv'isla:||tS'a:Ra | |||
_?? simbol | |||
_?A znak | |||
// Numbers | |||
_0 n'ula | |||
_1 j'eden | |||
_2 dv'a | |||
_2f dvj'e | |||
_3 tR^/i | |||
_4 tSt'iR^i | |||
_5 p'jet | |||
_6 S'est | |||
_7 s'edum | |||
_8 'osum | |||
_9 d'evjet | |||
_10 d'eset | |||
_11 j'edena:tst | |||
_12 dv'ana:tst | |||
_13 tR^/'ina:tst | |||
_14 tSt'r-na:tst | |||
_15 p'atna:tst | |||
_16 S'estna:tst | |||
_17 s'edumna:tst | |||
_18 'osumna:tst | |||
_19 d'evatena:tst | |||
_2X dv'atset | |||
_3X tR^/'itset | |||
_4X tSt'iR^itset | |||
_5X p'adesa:t | |||
_6X S'edesa:t | |||
_7X s'edumdesa:t | |||
_8X 'osumdesa:t | |||
_9X d'evadesa:t | |||
_0C s'et | |||
_1C st'o | |||
_2C dvj'esc'e | |||
_3C tR^/'ist'a | |||
_4C tStiR^ist'a | |||
_1M1 c'isi:ts | |||
_0MA1 c'isi:tse | |||
_0M1 c'isi:ts | |||
_1M2 m'ilio:n | |||
_0MA2 m'ilio:ni | |||
_0M2 m'ilio:nu: | |||
_1M3 m'iliaRda | |||
_0MA3 m'iliaRdi | |||
_0M3 m'iliaRd | |||
_1M4 b'ilio:n | |||
_0MA4 b'ilio:ni | |||
_0M4 b'ilio:nu: | |||
_dpt _:tSa:Rka_ | |||
_. tetSka | |||
_0 n'ula | |||
_1 j'eden | |||
_2 dv'a | |||
_2f dvj'e | |||
_3 tR^/i | |||
_4 tSt'iR^i | |||
_5 p'jet | |||
_6 S'est | |||
_7 s'edum | |||
_8 'osum | |||
_9 d'evjet | |||
_10 d'eset | |||
_11 j'edena:tst | |||
_12 dv'ana:tst | |||
_13 tR^/'ina:tst | |||
_14 tSt'r-na:tst | |||
_15 p'atna:tst | |||
_16 S'estna:tst | |||
_17 s'edumna:tst | |||
_18 'osumna:tst | |||
_19 d'evatena:tst | |||
_2X dv'atset | |||
_3X tR^/'itset | |||
_4X tSt'iR^itset | |||
_5X p'adesa:t | |||
_6X S'edesa:t | |||
_7X s'edumdesa:t | |||
_8X 'osumdesa:t | |||
_9X d'evadesa:t | |||
_0C s'et | |||
_1C st'o | |||
_2C dvj'esc'e | |||
_3C tR^/'ist'a | |||
_4C tStiR^ist'a | |||
_1M1 c'isi:ts | |||
_0MA1 c'isi:tse | |||
_0M1 c'isi:ts | |||
_1M2 m'ilio:n | |||
_0MA2 m'ilio:ni | |||
_0M2 m'ilio:nu: | |||
_1M3 m'iliaRda | |||
_0MA3 m'iliaRdi | |||
_0M3 m'iliaRd | |||
_1M4 b'ilio:n | |||
_0MA4 b'ilio:ni | |||
_0M4 b'ilio:nu: | |||
_dpt _:tSa:Rka_ | |||
_. tetSka | |||
// Pronouns |
@@ -50,6 +50,9 @@ _` g@-*A:v | |||
_^ sI*kUmflEks | |||
_— g@d'ank@nSt@-*,IC | |||
_#9 t,abu:l'Ato:* | |||
_#32 l'e:*ts'aIC@n | |||
// Numbers | |||
//======== |
@@ -121,8 +121,8 @@ y Y | |||
: ; b c d dZ f g | |||
h j k l L m n N | |||
n^ p R s S t t2 tS | |||
v w z Z z2 | |||
n^ p r R s S t t2 | |||
tS v w z Z z2 | |||
Dictionary hi_dict | |||
@@ -214,15 +214,15 @@ z Z Z; | |||
Dictionary ru_dict | |||
8 @- A a E e E# E2 | |||
E3 i I I# I2 I3 ja ju | |||
o O u u" u# V V# y | |||
Y | |||
E3 i I I# I2 I3 I^ ja | |||
ju o O u u" u# V V# | |||
y Y | |||
* ; b d d; dZ; f g | |||
j k l l^ m n n^ p | |||
r R s S s; S; t t; | |||
ts ts; tS; v x z Z z; | |||
Z; | |||
j k l l^ m m; n n^ | |||
p r R s S s; S; t | |||
t; ts ts; tS; v x z Z | |||
z; Z; | |||
Dictionary sk_dict |
@@ -173,6 +173,7 @@ ltd lImItId | |||
mc m@k | |||
oem $abbrev | |||
ok $abbrev | |||
otoh $abbrev | |||
os $abbrev | |||
riscos rIskoUEs | |||
sae $abbrev | |||
@@ -334,7 +335,6 @@ amoral eIm'0r@L | |||
amount a2maUnt | |||
amply amplI2 $verbf | |||
anal eIn@L | |||
analogous a2nal@g@s | |||
analog an@l0g | |||
analogue an@l0g | |||
analyses a2nal@si:z | |||
@@ -690,12 +690,14 @@ deficit dEfIsIt | |||
definitive dI2fInItIv | |||
deity deI@tI2 | |||
deja deIZA: $only | |||
deli dElI2 | |||
deliberate dI2lIb@r@t | |||
delicate dElIk@t | |||
delimit dI2lImIt // delimited | |||
demolish dI2m0lIS | |||
demon di:m@n | |||
demo dEmoU | |||
demonstrative $2 | |||
denouement deIn'u:mO~ | |||
denier dI2naI3 | |||
deny dI2naI | |||
@@ -854,6 +856,7 @@ finite faInaIt | |||
fishnet fISnEt | |||
fiord fi:O@d | |||
fix fIks // for fixer | |||
flagellum fla2dZEl@m | |||
flexible flEksIb@L | |||
flier flaI3 | |||
flourish flVrI2S | |||
@@ -948,6 +951,7 @@ herod hEr@d | |||
heroe hi@oU | |||
heroic hI2roUIk | |||
heroin hEroUIn | |||
heroism hEroUIz@m | |||
heroine hEroUIn | |||
herpes h3:pi:z | |||
hideout haIdaUt | |||
@@ -1519,6 +1523,7 @@ replay ri:pleI | |||
reply rI2plaI // for replied | |||
repost r,i:p'oUst | |||
reprisal rI2praIz@L | |||
reputable rEpju:t@b@L | |||
reputation rEpju:t'eIS@n | |||
requiem rEkwIEm | |||
rescue 'rEskju: | |||
@@ -2255,6 +2260,7 @@ Samantha s@manT@ | |||
Sarah se@r@ | |||
Seamus SeIm@s | |||
Sean SO:n | |||
Sebastian $2 | |||
Sheila Si:l@ | |||
Sonia s0nj@ | |||
Sophie soUfI2 |
@@ -404,7 +404,6 @@ echo Eko | |||
fils fis | |||
haillon _|ajO~ | |||
haricot _|aRiko | |||
haricots _|aRikoz2 | |||
imprudent E~pRydA~ | |||
juin ZwE~ | |||
mars maRs | |||
@@ -611,3 +610,4 @@ pourcent puRsA~ | |||
vincent vE~sA~ | |||
@@ -7,48 +7,48 @@ | |||
// Numbers | |||
_0 nullA | |||
_1 EJ | |||
_2 kEttY: | |||
_3 ha:R2om | |||
_4 ne:J | |||
_5 Yt | |||
_6 hAt | |||
_7 he:t | |||
_8 n^olts | |||
_9 kilEnts | |||
_10 ti:z | |||
_1X tizEn | |||
_20 hu:s | |||
_2X huson | |||
_3X hAR2mints | |||
_4X nEJvEn | |||
_5X YtvEn | |||
_6X hAtvAn | |||
_7X hEtvEn | |||
_8X n^oltsvAn | |||
_9X kilEntsvEn | |||
_0C sa:z | |||
_1C sa:z | |||
_0M1 EzER2 | |||
_1M1 EzER2 | |||
_2M1 ke:tEzER2 | |||
_0M2 millio: | |||
_1M2 millio: | |||
_2M2 ke:tmillio: | |||
_0M3 millia:R2d | |||
_1M3 millia:R2d | |||
_2M3 ke:tmillia:R2d | |||
_0M4 billio: | |||
_1M4 billio: | |||
_2M4 ke:tbillio: | |||
_dpt ||_vEss2Y:_ | |||
_0 nullA | |||
_1 EJ | |||
_2 kEttY: | |||
_3 ha:R2om | |||
_4 ne:J | |||
_5 Yt | |||
_6 hAt | |||
_7 he:t | |||
_8 n^olts | |||
_9 kilEnts | |||
_10 ti:z | |||
_1X tizEn | |||
_20 hu:s | |||
_2X huson | |||
_3X hAR2mints | |||
_4X nEJvEn | |||
_5X YtvEn | |||
_6X hAtvAn | |||
_7X hEtvEn | |||
_8X n^oltsvAn | |||
_9X kilEntsvEn | |||
_0C sa:z | |||
_1C sa:z | |||
_0M1 EzER2 | |||
_1M1 EzER2 | |||
_2M1 ke:tEzER2 | |||
_0M2 millio: | |||
_1M2 millio: | |||
_2M2 ke:tmillio: | |||
_0M3 millia:R2d | |||
_1M3 millia:R2d | |||
_1M3 ke:tmillia:R2d | |||
_0M4 billio: | |||
_1M4 billio: | |||
_2M4 ke:tbillio: | |||
_dpt ||_vEss2Y:_ | |||
// Abbreviations | |||
km kilo:me:tER2 | |||
mm milime:tER2 | |||
mm milime:tER2 | |||
a.m An^n^i||m'int $dot | |||
dr doktoR2 $dot | |||
@@ -88,14 +88,14 @@ ez $u+ // this | |||
// Conjunctions | |||
és $u $pause $strend2 // and | |||
és $u $strend2 // and | |||
de $u+ $pause // but | |||
vagy $u+ $pause // or | |||
mert $pause // because | |||
miatt $pause // because | |||
bár $pause // although | |||
habár $pause // although | |||
mert $u $pause // because | |||
miatt $u // because | |||
bár $u $pause // although | |||
habár $u $pause // although | |||
ha $u $pause // if | |||
noha $u $pause // even thought | |||
@@ -108,6 +108,9 @@ noha $u $pause // even thought | |||
nem $alt2 $strend | |||
ne $u+ | |||
e $u // "-e" question | |||
e $atend // stressed at end of sentence | |||
// Unstressed adverbs prepositions etc. | |||
néhány $u+ | |||
is $u // also | |||
@@ -159,7 +162,7 @@ hoz $u // to | |||
höz $u | |||
ig $u // up to | |||
ik $u // -th | |||
nak $u // of, him/her | |||
nak $u // of, him/her | |||
nek $u | |||
nál $u // by | |||
nél $u | |||
@@ -169,20 +172,20 @@ os $u | |||
ra $u // onto | |||
re $u | |||
ról $u // from top of, about | |||
röl $u | |||
röl $u | |||
ről $u | |||
szer $u | |||
szor $u // times | |||
szór $u | |||
szór $u | |||
ször $u | |||
tól $u // from | |||
töl $u | |||
tól $u // from | |||
töl $u | |||
től $u | |||
val $u // with | |||
vel $u | |||
án $u // on that day | |||
é $u // his, her | |||
éi $u // his, her multiple | |||
é $u // his, her | |||
éi $u // his, her multiple | |||
én $u | |||
ón $u | |||
ós $u | |||
@@ -195,9 +198,8 @@ elé $u // before | |||
sok $u // many | |||
kevés $u // few | |||
se $u $pause // neither | |||
sem $u $pause // nor | |||
miatt $u $pause // because | |||
se $u // neither | |||
sem $u // nor | |||
be $u //into | |||
@@ -287,7 +289,6 @@ b be: | |||
c tse: | |||
d de: | |||
_e E | |||
e $atend // stressed at end of sentence | |||
f Eff | |||
g ge: | |||
h ha: |
@@ -34,6 +34,8 @@ hierar) ch (i C | |||
szé) ch tS | |||
_zi) ch (y tS | |||
c (szín tS | |||
dA) c (sz ts | |||
kilen) c (sz ts | |||
kvar) c (sz ts | |||
@@ -141,6 +143,8 @@ _minde) gy (ik J: | |||
ly j | |||
lly jj | |||
A) lj (A lj_| | |||
C) ly (_ li | |||
_kéth) ly li | |||
szamue) lly lli | |||
@@ -210,8 +214,10 @@ szamue) ly lli | |||
sz s | |||
ssz ss2 | |||
s (színű S | |||
hel) s (inki z | |||
ki) s (ebb SS | |||
_má) s (szó S | |||
_munká) s S | |||
_o) slo slo: | |||
_o) sló slo: | |||
@@ -289,6 +295,7 @@ vörösmar) ty ti | |||
má) zc (sz z | |||
mé) zc (sz z | |||
nehé) z (sé z | |||
szá) z (sz z | |||
tű) z (sz z | |||
ví) z (sz z | |||
tor) z (szülött z |
@@ -288,7 +288,7 @@ | |||
.group м | |||
_) м (_ Em | |||
м (ь m; | |||
м (ь m;I^ | |||
м (Y m; | |||
м (бь m; | |||
м (бY m; |
@@ -15,7 +15,7 @@ | |||
* GNU General Public License for more details. * | |||
* * | |||
* You should have received a copy of the GNU General Public License * | |||
* along with this program; if not, write see: * | |||
* along with this program; if not, see: * | |||
* <http://www.gnu.org/licenses/>. * | |||
***************************************************************************/ | |||
@@ -180,7 +180,8 @@ int SynthCallback(short *wav, int numsamples, espeak_EVENT *events); | |||
sometimes be zero (which does NOT indicate end of synthesis). | |||
events: an array of espeak_EVENT items which indicate word and sentence events, and | |||
also the occurance if <mark> and <audio> elements within the text. | |||
also the occurance if <mark> and <audio> elements within the text. The list of | |||
events is terminated by an event of type = 0. | |||
Callback returns: 0=continue synthesis, 1=abort synthesis. |
@@ -16,7 +16,7 @@ | |||
fr 35 118 | |||
fr_ca 11 118 | |||
hi 50 132 | |||
hu 22 112 | |||
hu 23 112 | |||
nl 26 117 | |||
pl 15 107 | |||
sk 29 125 | |||
@@ -24,7 +24,7 @@ | |||
hr 19 129 | |||
mk 21 130 | |||
sr 2 129 | |||
ru 36 124 | |||
ru 38 126 | |||
it 17 117 | |||
la 21 114 | |||
es 6 114 | |||
@@ -105,8 +105,8 @@ | |||
1 l^/j2u base | |||
1 l^/_l^ base | |||
1 l^/l^ base | |||
8 l/l base en af sk ru la pt ro | |||
10 l/_l base en af de sk ru la pt ro | |||
9 l/l base en af hu sk ru la pt ro | |||
11 l/_l base en af de hu sk ru la pt ro | |||
1 l/l_ base | |||
2 l/l@ base | |||
1 l/L1_aL base | |||
@@ -129,16 +129,16 @@ | |||
4 l/l_long base fr la ro | |||
2 l/lo base | |||
2 l/lu base | |||
8 l/tl base en af sk ru la pt ro | |||
9 l/tl base en af hu sk ru la pt ro | |||
6 l/xl base | |||
2 m/_m base ro | |||
2 m/m_ base ro | |||
3 m/_m base ru ro | |||
3 m/m_ base ru ro | |||
1 m/m@ base | |||
1 m/m#_ is | |||
1 m/ma base | |||
1 m/me base | |||
1 m/mi base | |||
2 m/mj base ro | |||
3 m/mj base ru ro | |||
1 m/mo base | |||
1 m/mu base | |||
1 n^/_n^ base | |||
@@ -574,9 +574,9 @@ | |||
1 vwl_no/u#2 no | |||
1 vwl_no/y# no | |||
1 vwl_no/y#y no | |||
1 vwl_ro/ii- ro | |||
2 vwl_ro/ii- ru ro | |||
1 vwl_ro/li ro | |||
1 vwl_ro/mi ro | |||
2 vwl_ro/mi ru ro | |||
1 vwl_ro/ni ro | |||
1 vwl_ru/8 ru | |||
1 vwl_ru/a ru |
@@ -185,4 +185,15 @@ phoneme s2 // second part of geminated [s:] | |||
switchvoicing z | |||
endphoneme | |||
phoneme l | |||
liquid | |||
length 100 | |||
lengthmod 7 | |||
beforenotvowel l/ | |||
formants l/l | |||
after _ l/_l | |||
after t l/tl | |||
// after l/ l/l_long // double l, make it longer | |||
endphoneme | |||
@@ -117,6 +117,28 @@ phoneme d; | |||
endphoneme | |||
phoneme I^ // "silent i", palatilizes the preceding consonant | |||
vowel starttype (i) endtype (i) | |||
length 70 | |||
unstressed nonsyllabic | |||
formants vwl_ro/ii- | |||
beforevowel ; | |||
after m; vwl_ro/mi | |||
endphoneme | |||
phoneme m; | |||
vcd blb nasal | |||
vowelout f1=2 f2=1000 -500 -350 f3=200 80 brk colr=1 | |||
starttype m endtype m | |||
length 100 | |||
lengthmod 4 | |||
formants NULL | |||
after _ m/_m | |||
before _ m/m_ | |||
before (r) m/mj | |||
endphoneme | |||
//******************************************************************* | |||
// VOWELS |
@@ -172,7 +172,7 @@ endphoneme | |||
phoneme @- // very short schwa | |||
vowel | |||
vowel nonsyllabic | |||
starttype (@) endtype (@) | |||
formants vowel/@- | |||
unstressed |
@@ -242,6 +242,7 @@ static keywtab_t keywords[] = { | |||
{"palatal", 0x2000000+phPALATAL}, | |||
{"long", 0x2000000+phLONG}, | |||
{"brkafter", 0x2000000+phBRKAFTER}, | |||
{"nonsyllabic",0x2000000+phNONSYLLABIC}, | |||
// voiced / unvoiced | |||
{"vcd", 0x2000000+phVOICED}, |
@@ -779,7 +779,7 @@ static int GetVowelStress(Translator *tr, unsigned char *phonemes, unsigned char | |||
continue; | |||
} | |||
if((ph->type == phVOWEL) && (ph->code != phonSCHWA_SHORT)) | |||
if((ph->type == phVOWEL) && !(ph->phflags & phNONSYLLABIC)) | |||
{ | |||
vowel_stress[count] = (char)stress; | |||
if((stress >= 4) && (stress >= max_stress)) | |||
@@ -892,7 +892,7 @@ void ChangeWordStress(Translator *tr, char *word, int new_stress) | |||
p = phonetic; | |||
while(*p != 0) | |||
{ | |||
if((phoneme_tab[*p]->type == phVOWEL) && (*p != phonSCHWA_SHORT)) | |||
if((phoneme_tab[*p]->type == phVOWEL) && !(phoneme_tab[*p]->phflags & phNONSYLLABIC)) | |||
{ | |||
if(vowel_stress[ix] != 0) | |||
*word++ = stress_phonemes[vowel_stress[ix]]; | |||
@@ -982,7 +982,7 @@ void Translator::SetWordStress(char *output, unsigned int dictionary_flags, int | |||
ix = 1; | |||
for(p = phonetic; *p != 0; p++) | |||
{ | |||
if((phoneme_tab[p[0]]->type == phVOWEL) && (p[0] != phonSCHWA_SHORT)) | |||
if((phoneme_tab[p[0]]->type == phVOWEL) && !(phoneme_tab[p[0]]->phflags & phNONSYLLABIC)) | |||
{ | |||
int weight = 0; | |||
int lengthened = 0; | |||
@@ -1314,7 +1314,7 @@ void Translator::SetWordStress(char *output, unsigned int dictionary_flags, int | |||
prev_last_stress = 0; | |||
} | |||
else | |||
if(((ph->type == phVOWEL) && (ph->code != phonSCHWA_SHORT)) || (*p == phonSYLLABIC)) | |||
if(((ph->type == phVOWEL) && !(ph->phflags & phNONSYLLABIC)) || (*p == phonSYLLABIC)) | |||
{ | |||
// a vowel, or a consonant followed by a syllabic consonant marker | |||
@@ -200,9 +200,10 @@ int unicode[80]; | |||
void DecodePhonemes2(const char *inptr, char *outptr) | |||
static void DecodePhonemes2(const char *inptr, char *outptr) | |||
//=================================================== | |||
// Translate from internal phoneme codes into phoneme mnemonics | |||
// This version is for Lexicon_De() | |||
{ | |||
unsigned char phcode; | |||
unsigned char c; | |||
@@ -279,7 +280,7 @@ void DecodePhonemes2(const char *inptr, char *outptr) | |||
} | |||
} | |||
*outptr = 0; /* string terminator */ | |||
} // end of DecodePhonemes | |||
} // end of DecodePhonemes2 | |||
void Lexicon_De() |
@@ -55,6 +55,8 @@ | |||
#define phBEFORENOTVOWEL 0x0c00 | |||
#define phSWITCHVOICING 0x0800 | |||
#define phNONSYLLABIC 0x100000 // don't count this vowel as a syllable when finding the stress position | |||
// fixed phoneme code numbers, these can be used from the program code | |||
#define phonCONTROL 1 | |||
#define phonSTRESS_U 2 |
@@ -1718,11 +1718,14 @@ f_input = f_in; // for GetC etc | |||
if(option_phoneme_input) | |||
{ | |||
if(phoneme_mode > 0) | |||
phoneme_mode--; | |||
else | |||
if((c1 == '[') && (c2 == '[')) | |||
phoneme_mode = 1; // input is phoneme mnemonics, so don't look for punctuation | |||
phoneme_mode = -1; // input is phoneme mnemonics, so don't look for punctuation | |||
else | |||
if((c1 == ']') && (c2 == ']')) | |||
phoneme_mode = 0; | |||
phoneme_mode = 2; // set phoneme_mode to zero after the next two characters | |||
} | |||
if(c1 == '\n') | |||
@@ -1761,7 +1764,7 @@ if(option_ssml) parag=1; | |||
linelength = 0; | |||
} | |||
if(option_punctuation && (phoneme_mode==0) && iswpunct(c1)) | |||
if(option_punctuation && (phoneme_mode==0) && (sayas_mode==0) && iswpunct(c1)) | |||
{ | |||
// option is set to explicitly speak punctuation characters | |||
// if a list of allowed punctuation has been set up, check whether the character is in it |
@@ -442,7 +442,7 @@ p->pitch1 = p->pitch2 - 20; // post vocalic [r/] | |||
end_of_clause = 0; | |||
for(p2 = p+1; p2->newword== 0; p2++) | |||
{ | |||
if(p2->type == phVOWEL) | |||
if((p2->type == phVOWEL) && !(p2->ph->phflags & phNONSYLLABIC)) | |||
more_syllables++; | |||
} | |||
if((p2->newword & 2) && (more_syllables==0)) |
@@ -49,6 +49,7 @@ | |||
char path_home[120]; | |||
char wavefile[120]; | |||
int (* uri_callback)(int, const char *, const char *) = NULL; | |||
int (* phoneme_callback)(const char *) = NULL; | |||
static const char *help_text = |
@@ -61,6 +61,7 @@ static espeak_AUDIO_OUTPUT my_mode=AUDIO_OUTPUT_SYNCHRONOUS; | |||
static int synchronous_mode = 1; | |||
t_espeak_callback* synth_callback = NULL; | |||
int (* uri_callback)(int, const char *, const char *) = NULL; | |||
int (* phoneme_callback)(const char *) = NULL; | |||
char path_home[120]; | |||
@@ -657,6 +658,12 @@ ESPEAK_API void espeak_SetUriCallback(int (* UriCallback)(int, const char*, cons | |||
uri_callback = UriCallback; | |||
} | |||
ESPEAK_API void espeak_SetPhonemeCallback(int (* PhonemeCallback)(const char*)) | |||
{//=========================================================================== | |||
phoneme_callback = PhonemeCallback; | |||
} | |||
ESPEAK_API int espeak_Initialize(espeak_AUDIO_OUTPUT output_type, int buf_length, const char *path, int options) | |||
{//============================================================================================================= | |||
ENTER("espeak_Initialize"); |
@@ -180,7 +180,8 @@ int SynthCallback(short *wav, int numsamples, espeak_EVENT *events); | |||
sometimes be zero (which does NOT indicate end of synthesis). | |||
events: an array of espeak_EVENT items which indicate word and sentence events, and | |||
also the occurance if <mark> and <audio> elements within the text. | |||
also the occurance if <mark> and <audio> elements within the text. The list of | |||
events is terminated by an event of type = 0. | |||
Callback returns: 0=continue synthesis, 1=abort synthesis. | |||
@@ -266,7 +267,7 @@ espeak_ERROR espeak_Synth(const void *text, | |||
espeakSSML Elements within < > are treated as SSML elements, or if not recognised are ignored. | |||
espeakPHONEMES Text within [[ ]] is treated as phonemes codes (in espeak's Hirschenbaum encoding). | |||
espeakPHONEMES Text within [[ ]] is treated as phonemes codes (in espeak's Hirshenbaum encoding). | |||
espeakENDPAUSE If set then a sentence pause is added at the end of the text. If not set then | |||
this pause is suppressed. |
@@ -35,7 +35,7 @@ | |||
#include "translate.h" | |||
#include "wave.h" | |||
const char *version_string = "1.27.08 09.Jul.07"; | |||
const char *version_string = "1.27.09 12.Jul.07"; | |||
const int version_phdata = 0x012701; | |||
int option_device_number = -1; |
@@ -1547,6 +1547,11 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control) | |||
{ | |||
fprintf(f_trans,"%s\n",translator->phon_out); | |||
} | |||
if(phoneme_callback != NULL) | |||
{ | |||
phoneme_callback(translator->phon_out); | |||
} | |||
translator->CalcPitches(clause_tone); | |||
translator->CalcLengths(); | |||
@@ -335,12 +335,11 @@ Translator *SelectTranslator(const char *name) | |||
// tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x4; // don't propagate over word boundaries | |||
tr->langopts.param[LOPT_IT_DOUBLING] = 1; | |||
tr->langopts.param[LOPT_COMBINE_WORDS] = 99; // combine some prepositions with the following word | |||
tr->langopts.long_stop = 130; | |||
tr->langopts.numbers = 0x1809 + NUM_ROMAN; | |||
SetLetterVowel(tr,'y'); | |||
tr->langopts.spelling_stress = 1; | |||
//SetLengthMods(tr,3); // all equal | |||
SetLengthMods(tr,3); // all equal | |||
} | |||
break; | |||
@@ -502,6 +502,7 @@ extern char *p_textinput; | |||
extern wchar_t *p_wchar_input; | |||
extern int ungot_char; | |||
extern int (* uri_callback)(int, const char *, const char *); | |||
extern int (* phoneme_callback)(const char *); | |||
extern void SetLengthMods(Translator *tr, int value); | |||
Translator *SelectTranslator(const char *name); |