Browse Source

[1.31.03]

lang=en-r: change to phoneme [t#] (reduced "t")
Added "consonants" attribute to voice files.
Minor change to intonation types 2 and 3.
lang=zh: adjust tone levels
lang=fr: adjust stressAmp, adjust consonant strengths.
Platform RISC_OS. Disable the "breath" attribute in voices because floating point is not allowed in callbacks.
Platform RISC_OS. Implement ListVoices()


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

+ 16
- 13
dictsource/dict_phonemes View File

@@ -91,10 +91,10 @@ Dictionary es_dict
@- a aI e E eI eU i
o oI u

* b B d D f g j
J J^ k l l^ m n n^
p Q r R s t T tS
v w x
* ** b B d D f g
j J J^ k l l^ m n
n^ p Q r R s t T
tS v w x


Dictionary fi_dict
@@ -115,11 +115,10 @@ Dictionary fr_dict
E~ i i: o O O~ u W
w^i W~ y Y

* - : ; b c d dZ
f g h j k l L m
n N n^ p r R s S
t t2 tS v w z Z z2
z3
* : ; b c d dZ f
g h j k l L m n
N n^ p r R s S t
t2 tS v w z Z z2 z3


Dictionary hi_dict
@@ -214,10 +213,10 @@ Dictionary sk_dict
l- l: o o: oU r- r: u
u:

* b d d; dZ f g h
j k l l^ m n N n^
p r R R^ R^/ s S t
t; tS ts v x z Z
* : b d d; dZ f g
h j k l l^ m n N
n^ p r R R^ R^/ s S
t t; tS ts v x z Z


Dictionary sv_dict
@@ -387,3 +386,7 @@ O u
j k l m n N n^ p
r R s S t tS v w
x z


Dictionary ja_dict


+ 1
- 0
dictsource/en_list View File

@@ -2567,6 +2567,7 @@ he %hi: $verbsf
she %Si: $only $verbsf
it %It $verbsf
(it has) I2t||h'az $atend
it $allcaps $abbrev
we %wi: $verbf $only
you %ju: $verbf
they %DeI $verbf

+ 3
- 1
dictsource/en_rules View File

@@ -3151,7 +3151,7 @@
lle (_ l
@@o) lled (_$3v d
@@) lled (_$3v d
B) l (_N @L
B) l (_ @L
w) l (_ l
r) l (_ l
Al) l (_
@@ -4743,8 +4743,10 @@
j) une (_ u:n
l) une (_ u:n
r) une (_ u:n
?3 t) une (_ u:n
_) una (b ,Vna2
t) un (e ju:n
?3 t) un (e u:n
_) un (if ju:n
un (ani %ju:n
_) under (@P5 ,Vnd3 // prefix

+ 1
- 1
dictsource/es_list View File

@@ -148,7 +148,7 @@ siquiera $pause
porque $pause // because

// questions
que $u+ $pause // what
que $u $pause // what
cuál $pause // which
cuáles $pause
cómo $pause // how

+ 1
- 1
dictsource/es_rules View File

@@ -129,7 +129,7 @@
_) r (_ E*e
r R
_) r R
A) r (A *
A) r (A **
C) r (A @-*
rr *R


+ 27
- 34
dictsource/fr_list View File

@@ -1,10 +1,11 @@



// This file in UTF8 encoded

// 2006-11-18 Gilles Casse <[email protected]>
//
// Updated 2008-01-21 Michel Such <[email protected]>
// Updated 2008-01-25 Michel Such <[email protected]>
//
// * Numbers, a few abbreviations and exceptions.
//
@@ -173,11 +174,13 @@ _dpt virg'yl
abc $abbrev
ac $abbrev
adsl $abbrev
alt $pause
amd $abbrev
api $abbrev
avh $abbrev
cci $abbrev
cio $abbrev
ctrl kO~tRol
ctrl kO~tRol $pause
dept depaRt@mA~
etc etseteRa
hmm h@m
@@ -364,23 +367,27 @@ y i:gR'Ek $atend
// pronunciation exceptions

consent kO~s'A~t2
divers div'Erz2
scient si
bénéficient benefisi $verb
président pRezid'A~
président pRezidt2 $verb
résident Rezid'A~
résident Rezidt2 $verb
ressent r@s'A~t2
concurrent kO~kyR'A~
couvent k'uvt2 $verb
dessus d@sy
dessous d@su
divers divErz2
►évident evid'A~
évident evidt2 $verb
couvent k'uvt2 $verb
concurrent kO~kyR'A~
récurrent RekyR'A~
ferment fErm'A~
ferment f'Ermt2 $verb
parent paR'A~
parent p'art2 $verb
pastis pastis
président pRezid'A~
président pRezidt2 $verb
résident Rezid'A~
résident Rezidt2 $verb
ressent r@s'A~t2
récurrent RekyR'A~
riz ri
sergent sErZ'A~
serment sErm'A~
serpent sErp'A~
@@ -405,23 +412,18 @@ accident aksidA~
adéquat adekuat2
adéquate adekuat
ardent aRdA~
boeufs bY
bus bys
choeur kWr
choeur k@r
discident disidA~
fils fis
haillon _|ajO~
haricot _|aRiko
imprudent E~pRydA~
juin ZwE~
juin ZuE~
mars maRs
occident OksidA~
oeufs Y
orient ORjA~
pays pEi
prudent pRydA~
secret sYkRE
secrets sYkREz2
souris suri


@@ -435,9 +437,6 @@ s'y si $verbf
qu'y ki $verbf
(sud est) sydEst
(nord est) nOREst
cci $abbrev
nvda $abbrev
open Op'@n
potentiomètre pOtA~sjOmEtR@-

processus pROsEsys
@@ -462,11 +461,10 @@ out aut
rut Ryt
scorbut skORbyt
scout skut
scouts skut
stout staut
uppercut ypERkyt
ut yt
zut syt
zut zyt


// et (t is said)
@@ -509,8 +507,6 @@ flirt fl@Rt
(sweat shirt) swEtS@Rt
(tee shirt) tiS@Rt

parfum paRfW~
forum fOROm

// words from other languages
amazon amaz'On
@@ -551,6 +547,7 @@ new nj'u
news nj'uz
night najt
ok oke
open Op'@n
outlook autluk
player plEj'@r
reader Ri:d@R
@@ -563,7 +560,7 @@ skype sk'ajp@-
spybot spajbOt
sun s@n
sunlight s@nlajt
(text aloud) tEkst||@lau-d
(text aloud) tEkst||@lawd
thunderbird f@ndERb@Rd
ubuntu ubuntu
update @pd'E:jt
@@ -578,26 +575,23 @@ yacht jot

// tions (tjO~ instead of sjO~)
achetions aS@tjO~z2
ajoutions aZutjO~z2
apportions apORtjO~z2
apprêtions apREtjO~z2
arrêtions aREtjO~z2
chantions SA~tjO~z2
citions sitjO~z2
comptions kO~tjO~z2
constations kO~statjO~z2
contentions kO~tA~tjO~z2
dations datjO~z2
discutions diskytjO~z2
doutions dutjO~z2
débutions debytjO~z2
désertions dezERtjO~z2
désertions dezERtjO~z2 $verb
détentions detA~tjO~z2
escomptions EskO~tjO~z2
exploitions EksplwatjO~z2
exportions EkspORtjO~z2
habitions abitjO~z2
heurtions @RtjO~z2
heurtions _!@RtjO~z2
jetions Z@tjO~z2
limitions limitjO~z2
méritions meRitjO~z2
@@ -605,8 +599,7 @@ partions paRtjO~z2
pressentions pREsA~tjO~z2
présentions pRezA~tjO~z2
prêtions pREtjO~z2
rations RatjO~z2
redoutions R@dutjO~z2
rations RatjO~z2 $verb
représentions R@pRezA~tjO~z2
respections REspEktjO~z2
ressentions R@sA~tjO~z2
@@ -618,7 +611,6 @@ supportions sypORtjO~z2
tentions tA~tjO~z2
traitions tREtjO~z2
votions vOtjO~z2 $u
écoutions ekutjO~z2
étions etjO~z2
évitions evitjO~z2

@@ -634,3 +626,4 @@ vincent vE~sA~





+ 32
- 24
dictsource/fr_rules View File

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

// 2006-11-18 Gilles Casse <[email protected]>
//
// Updated: 2008-01-21 Michel Such <[email protected]>
// Updated: 2008-01-25 Michel Such <[email protected]>
//
// * The rules are based on Cicero TTS.
//
@@ -107,15 +107,14 @@
quon) d (_ t2

dt (_ t // Schmidt
_ni) d (_ // nid
_noeu) d (_ // noeud
r) d (_ // lourd placard
d d // don bled


.group e
e (Ce_ E
AC) e (_ @- // e muet
CC) e (_ @- // e muet
gu) e (_ @- // e muet
eau o // bateau cheveaux
j) e (a // Jean Jeanne
sp) ea (k i: // speak speaker
@@ -210,6 +209,7 @@
en (s_ A~
en (CA A~ // pentathlon
en (CC A~ // entre
en (ch_ En // french

_C) er (_ ER // fer
_Ch) er (_ ER // cher
@@ -249,14 +249,15 @@
_r) es (A @s // resaisir resaluer

_r) e (ss @ // ressembler
_r) e (ssu e // ressusciter
_r) e (stra @
_r) e (stre @
_r) e (stro @
_r) e (stru @ // restructurer
-) est (_ Est // -est

@Cr) es (_C =@
rC) es (_C =@ // fortes dames
@Cr) es (_C @-
rC) es (_C @- // fortes dames

') eu (_ y // eu
eu (r_ @ // peur
@@ -282,17 +283,20 @@

ez (_ ez2 // nez mangez chez
_C) e (_ @ // je te
_CC) e (_ @
_CC) e (_ @-
_qu) e (_ @ // que

@Cr) e (_C =@ // quatre pattes
rC) e (_C =@
@Cr) e (_C @- // quatre pattes
CC) e (_C @-
ch) e (_C @-
gu) e (_C @-
qu) e (_C @-

e (_ // montre

g) e (A // mangeons

AC) e (ment // vitement sûrement
AC) e (ment @- // vitement sûrement
Aqu) e (ment
enC) e (ment
enqu) e (ment
@@ -386,11 +390,13 @@

.group h
_) h (ac _! // hache
_) h (ai _! // haine haillon
_) h (al _! // halte
_) h (amp _! // hampe
_) h (an _! // hanche
_) h (app _! // happer
_) h (arc _! // harceler
_) h (ari _! // haricot haridelle
_) h (arna _! // harnais
_) h (ard _! // hardi
_) h (arp _! // harpe
@@ -398,6 +404,7 @@ _) h (au _! // haut
_) h (av _! // havre
_) h (ern _! // hernie
_) h (ers _! // herse
_) h (eurt _! // heurter
_) h (ibo _! // hibou
_) h (ide _! // hideux
_) h (oll _! // hollandais
@@ -500,19 +507,22 @@ _) h (utte_ _! // hutte
cr) oc (_ o // escroc

o (ch o // cochon
o (che_ O // poche, cloche
oe (ll wa // moelleux
_) oe (C Y // oesophage
o (eu // soeur oeuf
oeu @ // soeur coeur
oeufs @ // oeufs boeufs
o (eC o // coefficient
_) oi (gnon O // oignons
oin (C wE~
oin (_ wE~ // coin
oi wa // poil
oid (_ wa // froid
oê (l wE // poêle
oê (l wa // poêle
oî wa // boîte
o (mm O // comme
dr) o (me_ o // vélodrome
radi) o (C o // radiophonique
dr) o (me_ O // vélodrome
ph) o (ne_ O // téléphone
om (b O~ // bombe
om (p O~ // pompe
@@ -606,7 +616,6 @@ _) h (utte_ _! // hutte
_A) qu (a ku // équateur
qu k // quatre
_) que (_ k@ // que
que (_ k@- // puisque banque...
_) qu' (P3 k // qu'il
n) q (_ k // cinq cent

@@ -616,8 +625,6 @@ _) h (utte_ _! // hutte
_su) rr RR // surréaliste
cou) rr RR // courrai
mou) rr RR // mourrai
rre (_ R@- // barre
C) re (_ R@- // litre
rr R // erreur
r r // rien

@@ -682,16 +689,11 @@ V) t (_ t2 // silent at end of verb unless next word starts with a vowe
Vn) t (_ t2 // silent at end of verb unless next word starts with a vowel
n) t (_ // silent at end of word
r) t (_ t2 // fort
tte (_ t@- // fillette
C) te (_ t@- // patte
a) te (_ t@- // tomate

aul) t (_ // Renault

tt t // attitude
tte (_ t@- // fillette
A) te (_ t@- // tomate
C) te (_ t@- // pente

s) th (m // asthme
th t // théorie
@@ -712,6 +714,9 @@ C) te (_ t@- // pente


t (ion s // programmation
Cisi) t (ion t // visitions
ci) t (ion t // citions
ou) t (ion t // ajoutions
s) t (ion t // gestion
t) t (ion t // combattions

@@ -739,13 +744,14 @@ C) te (_ t@- // pente
u y // cruel nuage brut
ui w^i

c) ueill Wj // cueillir
c) ueil (_ Wj // recueil
g) ueill Wj // orgueilleux
g) ueil (_ Wj // orgueil

c) ueill Wj
c) ueil (_ Wj

um (_ Om // album
f) um (_ W~ // parfum
um (b W~ // humble
um (p W~
un (C W~ // emprunt lundi
@@ -763,7 +769,8 @@ C) te (_ t@- // pente

.group w
w w
ware (_ _^_EN // hardware, software
wa (Ce_ wE // hardware software wave
w (agon v // wagon


.group x
@@ -853,3 +860,4 @@ C) te (_ t@- // pente





+ 85
- 45
dictsource/sk_list View File

@@ -2,54 +2,94 @@
// This file is UTF-8 encoded

// Letters
_a a:
á d,l-he:'a:
ä 'a:prehlasovane:
b be:
c tse:
č tSe:
d de:
ď d;e:
e e:
é d,l-he:'e:
f ef
g ge:
h ha:
i i:
í d,l-he:'i:
j je:
_k ka:
l el
ľ el^
ĺ d,l-he:'el
m em
n en
ň en^
_o o:
ó d,l-he:'o:
ô 'o:sv,oka:n^om
p pe:
q kve:
r er
_s es
š eS
t te:
ť t;e:
u u:
ú dl-he:'u:
_v ve:
w dv'ojite:,ve:
x iks
y ipsilon
ý d,l-he:'i:
_z zet
ž Zet
_a a:
á d,l-he:'a:
ä 'a:pRehlasovane:
b be:
c tse:
č tSe:
d de:
ď d;e:
e e:
é d,l-he:'e:
f ef
g ge:
h ha:
i i:
í d,l-he:'i:
j je:
_k ka:
l el
ľ el^
ĺ d,l-he:'el
m em
n en
ň en^
_o o:
ó d,l-he:'o:
ô 'o:sv,oka:n^om
p pe:
q kve:
r eR
ř eR^
_s es
š eS
t te:
ť t;e:
u u:
ú dl-he:'u:
ů 'u:s_kR'oUZkem
_v ve:
w dv'ojite:,ve:
x iks
y ipsilon
ý d,l-he:'i:
_z zet
ž Zet

// character names
_cap vel^ke:
_?? simbol
_#9 tab
_#32 'medzeRa
_?A znak

_! vi:kRitSn^i:k
_" u:vodzovki
_# kRi:Zik
_$ dola:R
_& ampeRsand
_' apostRof
_( za:tvoRka
_) zatvoRit;
_* hviezda
+ plus
_, tSiaRka
_- pomltSka
_. bodka
_/ lomeno
_: dvojbodka
_; bodkotSiaRka
_< menSi:
_= Rovna:sa
_> vetSSi:
_? ota:zn^ik
_@ zavin:atS
_[ hRanata:||za:tvoRka
_\ opatSne:||lomeno
_] hRanata:||zatvoRit;
_^ stRieZka
_` aktsent
_{ zloZena:||za:tvoRka
_| zvisla:||tSiaRa
_} zloZena:||zatvoRit;
_~ vlnovka
€ euRo


// Numbers
_0 n'ula
_1 j'ed;en
_1 j'eden
_2 dv'a
_3 t'@-*i
_4 St'i*i
@@ -59,7 +99,7 @@ _7 s'ed;em
_8 'osem
_9 d;'ev&t;
_10 d;'esat;
_11 j'ed;ena:st;
_11 j'edena:st;
_12 dv'ana:st;
_13 t@-*'ina:st;
_14 Str-n'a:st;
@@ -82,7 +122,7 @@ _0M1 t;'isi:ts
_1M1 t;'isi:ts
_2M1 dv'et;'isi:ts
_0M2 m'ilio:n
_0M3 m'iljarda
_0M3 m'iljaRda
_dpt _:tSj,arka_



+ 3
- 3
dictsource/sk_rules View File

@@ -639,7 +639,7 @@ _charak) te (r te
.group
ě e
ů u: // czech
$ dola:r
% pertsento
+ plus
$ dola:R
% peRtsento
D_) % peRtsent


+ 39
- 9
phsource/compile_report View File

@@ -1,4 +1,4 @@
45 phoneme tables
46 phoneme tables
new total
base 98 98
base2 24 117
@@ -15,7 +15,7 @@
eo 13 110
jbo 4 111
fi 40 129
fr 38 122
fr 42 122
fr_ca 11 122
hi 50 134
ta 15 136
@@ -45,6 +45,7 @@
sw 14 107
th 50 141
id 14 119
ja 7 103

Data file Used by
b/b [b] base
@@ -83,6 +84,7 @@ d/d [d] base
[d[] base
[d] base2
[d] fi
[d] fr
[d] hi
[d.] hi
[d] hu
@@ -98,6 +100,7 @@ d/d_ [d] base
[d[] base
[d] base2
[d] fi
[d] fr
[d] hi
[d.] hi
[d] hu
@@ -115,6 +118,7 @@ d/dr [*] base
[d[] base
[d] base2
[d] fi
[d] fr
[d] hi
[d.] hi
[d] hu
@@ -128,6 +132,7 @@ d/dr [*] base
[d] sw
d/tap [*;] ro
d/tap1 [*] base
d/tap2 [t#] en_us
d/tap3 [*] base
d/tap4 [r] es
d/tap_i [*;] ro
@@ -135,6 +140,7 @@ d/xd [d] base
[d[] base
[d] base2
[d] fi
[d] fr
[d] hi
[d.] hi
[d] hu
@@ -146,6 +152,7 @@ d/xd [d] base
[d] sw
d/xd_pzd [d;] pl
[d;] ru
d/x_tap [t#] en_us
dzh/dzh [dZ] base
[dZ;] base
[dz;] base
@@ -192,11 +199,11 @@ envelope/p_fallrise [4] vi
envelope/p_level [1] vi
[3] zhy
[6] zhy
[44] zh
[55] zh
envelope/p_rise [3] vi
[2] zhy
[5] zhy
[44] zh
[35] zh
[4] th
envelope/vi_5 [5] vi
@@ -209,14 +216,17 @@ g2/xg [g-] base
[g] hi
g/g [g] base
[g] cy
[g] fr
[g] hi
[g] es
g/g_ [g] base
[g] cy
[g] fr
[g] hi
[g] es
g/xg [g] base
[g] cy
[g] fr
[g] es
h/h_ [h] base
[h] fi
@@ -303,6 +313,7 @@ l/_l [l] base
[l] en_wi
[l] af
[l/] de
[l] fr
[l] hu
[l] sk
[l] ru
@@ -353,6 +364,7 @@ l/tl [l] base
[l] en
[l] en_wi
[l] af
[l] fr
[l] hu
[l] sk
[l] ru
@@ -551,11 +563,14 @@ ufric/f_ [f] base
ufric/ll [L] base
[l#] is
ufric/s [s] base
[s] fr
[s] es
[s#] pt
ufric/s_ [s] base
[z] base
[s2] fi
[s] fr
[z] fr
[z2] fr
[z3] fr
[s2] hu
@@ -564,14 +579,17 @@ ufric/s_ [s] base
[z;] ro
ufric/s! [s] base
[s2] fi
[s] fr
[s2] hu
[s] es
[s#] pt
ufric/s_continue [s2] fi
[s2] hu
ufric/sh [S] base
[S] fr
[s#] pt_pt
ufric/sh_ [S] base
[S] fr
[s#] pt_pt
ufric/sh_pzd [S;] base
[S;] ro
@@ -753,6 +771,7 @@ ustop/t_pzd [t;] pl
ustop/tr [t] base
[t[] base
[t2] en
[t] fr
[t.h] hi
[t] ru
ustop/ts [ts] base2
@@ -1022,8 +1041,8 @@ vdiph/y#y_2 [Yy] af
[eoi] zhy
vdiph/y#y_3 [Y:] nl
vnasal/aa_n [A~] en
vnasal/aa_n2 [A~] fr
vnasal/aa_n3 [A~] af
[A~] fr
vnasal/a#_n [&~] pt
vnasal/a#u_n [&U~] pt
[&U~] pt_pt
@@ -1083,6 +1102,7 @@ voc/v_ [B] base
[v;] ro
[v] is
voc/vj [v] base
[v] fr
vocw/dh [D] base
[D] es
vocw/Q [Q] base
@@ -1100,10 +1120,12 @@ vocw/zh [Z] base
[Z;] ro
vocw/zh_rfx [z.] base
voc/z [z] base
[z] fr
[z2] fr
[z3] fr
[z;] ro
voc/z_ [z] base
[z] fr
[z2] fr
[z3] fr
[z;] ro
@@ -1131,7 +1153,6 @@ vowel/@ [@] base
[@4] hi
[@] th
vowel/@- [@-] base
[@-] fr
[r*] hr
vowel/& [a] en_rp
[&] fi
@@ -1148,8 +1169,7 @@ vowel/0_2 [0] en_n
vowel/0_3 [O] en_sc
[0] en_rp
[A] hu
vowel/@_2 [@] fr
[W] fr
vowel/@_2 [W] fr
vowel/@_3 [@] en_sc
[I] en_sc
[@2] en_sc
@@ -1187,6 +1207,7 @@ vowel/a [a] en_n
[a] th
[a:] th
[a] id
[a] ja
vowel/a# [a/] base2
[a2] en_sc
[a2] en_wi
@@ -1341,6 +1362,7 @@ vowel/e_mid [E] en_rp
[E] is
[E] id
[E2] id
[e] ja
vowel/e_mid2 [E] af
[E] de
[E2] de
@@ -1354,6 +1376,7 @@ vowel/e_mid2 [E] af
vowel/@_fnt [@] en_wi
[@2] en_wi
[@2] hr
vowel/@_fr [@] fr
vowel/@_hgh [@] hr
vowel/i [i] base2
[i:] en_n
@@ -1377,6 +1400,7 @@ vowel/i [i] base2
[i] sw
[i] th
[i:] th
[i] ja
vowel/i# [i] en_us
[i] en_rp
[y:] cy
@@ -1507,6 +1531,7 @@ vowel/oo [O:] en_sc
[O] th
[O:] th
[O] id
[o] ja
vowel/oo_1 [O:] en_n
[O:] en_rp
[O@] en_rp
@@ -1565,7 +1590,6 @@ vowel/u [u:] en_wi
vowel/u# [u-] en
[u:] en_sc
vowel/u_2 [u1] fi
[u] fr
[u] sk
[U] hr
[u] ro
@@ -1576,13 +1600,14 @@ vowel/u_4 [u:] en_n
vowel/u#_4 [U] en_sc
[u:] en_sc
vowel/u_5 [u] sw
vowel/u#_5 [u:] en_us
vowel/u_6 [U] pt_pt
[u] pt_pt
vowel/u#_6 [u:] en_us
vowel/u_7 [u] vi
vowel/u_bck [u] base2
[U] cy
[u] fi
[u] fr
[u] fr_ca
[u:] hi
[u:] hu
@@ -1615,6 +1640,7 @@ vowel/uu_bck [U] en_n
[U] pt
[U] no
[u] zhy
vowel/u_unr [u] ja
vowel/V [3] en_sc
vowel/V_2 [V] en
[a] af
@@ -1824,6 +1850,7 @@ x/b [b] base
x/b_ [b] base
x/d [d] base
[t#] en_us
[d] fr
[d.] hi
[d] hr
[d] el
@@ -1832,6 +1859,7 @@ x/d_ [d] base
[d[] base
[d] base2
[d] fi
[d] fr
[d] hi
[d.] hi
[d] pl
@@ -1870,10 +1898,12 @@ x/dz_pzd [dZ;] base
x/dz_pzd_ [J2] hi
x/g_ [g] base
[g] cy
[g] fr
[g] es
[g] is
x/g2 [g] base
[g] cy
[g] fr
[g] hi
[g] es
[g] is

BIN
phsource/d/tap2 View File


BIN
phsource/d/tap4 View File


+ 12
- 13
phsource/ph_english_us View File

@@ -27,7 +27,7 @@ endphoneme

phoneme a
vowel starttype (a) endtype (@)
length 200
length 210
formants vwl_en_us/a
reduceto a2 0
endphoneme
@@ -52,7 +52,7 @@ endphoneme

phoneme E
vowel starttype (e) endtype (e)
length 180
length 185
// formants vowel/ee_2
formants vwl_en_us/ee
reduceto I 0
@@ -161,7 +161,7 @@ endphoneme

phoneme o@
vowel starttype (o) endtype (@)
length 260
length 250
formants vwl_en_us/or
appendph r
endphoneme
@@ -178,8 +178,8 @@ endphoneme
phoneme u:
vowel starttype (u) endtype (u)
length 170
formants vowel/u#_5
// before l/2 vwl_en/u_L-40+l/L2_uL
formants vowel/u#_6
// formants vowel/u#_5
endphoneme


@@ -228,7 +228,7 @@ endphoneme

phoneme i@3
vowel starttype (i) endtype (@)
length 260
length 250
formants vwl_en_us/ir
appendph r
endphoneme
@@ -271,12 +271,11 @@ endphoneme


phoneme t# // reduced [t] as in "city"
vls alv stop
vowelin f1=0 f2=1700 -300 300 f3=-100 80
vowelout f1=0 f2=1700 -300 300 f3=-100 80
lengthmod 5
wave x/d%70
vcd alv stop
vowelin f1=1 f2=1700 -300 300 f3=-100 80
vowelout f1=2 f2=1700 -300 300 f3=-100 80
formants d/tap2+x/d%70
after @ d/x_tap
lengthmod 2
endphoneme




+ 150
- 94
phsource/ph_french View File

@@ -13,16 +13,7 @@ phoneme @
vowel starttype (@) endtype (@)
unstressed
length 170
formants vowel/@_2
endphoneme


phoneme @- // very short schwa
vowel nonsyllabic
starttype (@) endtype (@)
formants vowel/@-
unstressed
length 20
formants vowel/@_fr
endphoneme


@@ -80,8 +71,8 @@ endphoneme

phoneme u
vowel starttype (u) endtype (u)
length 170
formants vowel/u_2
length 160
formants vowel/u_bck
endphoneme


@@ -101,7 +92,8 @@ endphoneme

phoneme w
liquid
length 130
unstressed
length 100
beforenotvowel w/
lengthmod 7
formants w/w
@@ -128,7 +120,7 @@ endphoneme
phoneme A~
vowel starttype (a) endtype (a)
length 180
formants vnasal/aa_n3
formants vnasal/aa_n2
endphoneme


@@ -194,14 +186,74 @@ endphoneme
//===========
// uses the consonants in file "phonemes", unless overridden here

phoneme b
vcd blb stop
vowelout f1=0 f2=1000 -500 -300 f3=-300 80 brk
formants b/b+x/b%45
before _ b/b_+x/b%45
before (a) b/ba+x/b%45
before (@) b/b@+x/b%45
before (e) b/be+x/b%45
before (i) b/bi+x/b%45
before (o) b/bo+x/b%45
before (u) b/bu+x/b%45
before @- b/b@2+x/b%45
after _ NULL
after @ b/xb%45
lengthmod 5
switchvoicing p
endphoneme


phoneme d
vcd alv stop
vowelin f1=0 f2=1700 -300 300 f3=-100 80
vowelout f1=0 f2=1700 -300 300 f3=-100 80
formants d/d%30+x/d%30
before _ d/d_%30+x/d_%30
before r d/dr%60+x/d%60
after _ NULL
after @ d/xd%40
lengthmod 5
switchvoicing t
endphoneme


phoneme g
vcd vel stop
vowelin f1=2 f2=2300 200 300 f3=-300 80
vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
formants g/g%30+x/g2%30
before _ g/g_+x/g_
after _ NULL
after @ g/xg%30
lengthmod 5
switchvoicing k
endphoneme


phoneme k
vls vel stop
vowelin f1=0 f2=2300 200 400 f3=-100 80
vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20
lengthmod 2
wave ustop/k%45 // reduce strength of noise burst
before _ ustop/k_%45
before r ustop/kr%45
before l ustop/kl%45
before (i) ustop/ki%45
switchvoicing g
endphoneme


phoneme l
liquid
length 100
lengthmod 7
// beforenotvowel l/
formants l/l
// after _ l/_l
// after t l/tl
after _ l/_l
after t l/tl
after l/ l/l_long // double l, make it longer
before (a) l/la
before (e) l/le
@@ -213,15 +265,31 @@ phoneme l
endphoneme


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%45
before _ ustop/p_%45
before r ustop/pr%45
before R ustop/pr%45
before @- ustop/p_unasp%45
before l ustop/pl%45
switchvoicing b
endphoneme


phoneme r
vcd uvl frc
vowelin f1=0 f2=800 -100 100 f3=-400 100
vowelout f1=0 f2=800 -100 100 f3=-400 100 len=0 rms=20
length 100
lengthmod 7
beforenotvowel r/
formants vwl_fr/@R%40
after t r/tr
before _ r3/r_
formants vwl_fr/@R%60
after t r/tr%60
before _ r3/r_%60
endphoneme


@@ -231,8 +299,8 @@ phoneme R
length 100
lengthmod 7
beforenotvowel r/
formants vwl_fr/@R%40
after r r/rr
formants vwl_fr/@R%60
after r r/rr%60
endphoneme


@@ -240,8 +308,34 @@ phoneme r/ // used for [r] when not preceding a vowel
vcd uvl frc
length 100
lengthmod 2 //
formants r3/r_+r3/rx
before n r3/r_n+r3/rx
formants r3/r_+r3/rx%60
before n r3/r_n+r3/rx%60
endphoneme


phoneme s
vls alv frc sibilant
vowelin f1=0 f2=1700 -300 300 f3=-100 80
vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
lengthmod 3
wave ufric/s%45
before _ ufric/s_%45
before p ufric/s!%45
before t ufric/s!%45
before k ufric/s!%45
switchvoicing z
endphoneme


phoneme S
vls pla frc sibilant
vowelin f1=0 f2=2100 100 300 f3=-100 80
vowelout f1=0 f2=2100 100 300 f3=-100 80
length 100
lengthmod 3
wave ufric/sh%45
before _ ufric/sh_%45
switchvoicing Z
endphoneme


@@ -250,11 +344,11 @@ phoneme t
vowelin f1=0 f2=1700 -100 100 f3=-100 80
vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
lengthmod 2
wave ustop/t%50
before _ ustop/t_%40
before @- ustop/t%50
// before r ustop/tr
// before R ustop/tr
wave ustop/t%30
before _ ustop/t_%30
before @- ustop/t%30
before r ustop/tr%30
before R ustop/tr%30
switchvoicing d
endphoneme

@@ -265,8 +359,30 @@ phoneme t2 // silent unless followed by vowel
vowelin f1=0 f2=1600 -300 300 f3=-100 80
vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20
lengthmod 2
wave ustop/t
before _ ustop/t_
wave ustop/t%45
before _ ustop/t_%45
endphoneme


phoneme v
vcd lbd frc
vowelin f1=0 f2=1000 -300 -200 f3=-300 100
vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=10
lengthmod 6
formants voc/v+vocw/v%75
before (r) voc/vj+vocw/v%75
before _ voc/v_+vocw/v%75
switchvoicing f
endphoneme


phoneme z
vcd alv frc sibilant
vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50
formants voc/z+ufric/s_%45
before _ voc/z_+ufric/s_%45
lengthmod 6
switchvoicing s
endphoneme


@@ -274,8 +390,8 @@ phoneme z2 // silent unless followed by vowel
beforenotvowel NULL
vcd alv frc sibilant
vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50
formants voc/z+ufric/s_
before _ voc/z_+ufric/s_
formants voc/z+ufric/s_%45
before _ voc/z_+ufric/s_%45
lengthmod 6
endphoneme

@@ -284,68 +400,8 @@ phoneme z3 // "six" and "dix". [s] before pause, [z] before vowel, else []
beforenotvowel NULL
vcd alv frc sibilant
vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50
formants voc/z+ufric/s_
before _ voc/z_+ufric/s_
lengthmod 6
endphoneme



phoneme k
vls vel stop
vowelin f1=0 f2=2300 200 400 f3=-100 80
vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20
lengthmod 2
wave ustop/k%60 // reduce strength of noise burst
before _ ustop/k_
before r ustop/kr
before l ustop/kl
before (i) ustop/ki
switchvoicing g
endphoneme


phoneme v
vcd lbd frc
vowelin f1=0 f2=1000 -300 -200 f3=-300 100
vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50
formants voc/z+ufric/s_%45
before _ voc/z_+ufric/s_%45
lengthmod 6
formants voc/v+vocw/v
before _ voc/v_+vocw/v
switchvoicing f
endphoneme


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
before _ ustop/p_
before r ustop/pr%70
before R ustop/pr
before @- ustop/p_unasp
before l ustop/pl
switchvoicing b
endphoneme


phoneme b
vcd blb stop
vowelout f1=0 f2=1000 -500 -300 f3=-300 80 brk
formants b/b+x/b
before _ b/b_+x/b
before (a) b/ba+x/b
before (@) b/b@+x/b
before (e) b/be+x/b
before (i) b/bi+x/b
before (o) b/bo+x/b
before (u) b/bu+x/b
before @- b/b@2+x/b
after _ NULL
after @ b/xb
lengthmod 5
switchvoicing p
endphoneme


+ 4
- 4
phsource/ph_zh View File

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

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

phoneme 21 // tone: low fall
@@ -20,12 +20,12 @@ endphoneme

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

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

phoneme 35 // tone: mid rise
@@ -35,7 +35,7 @@ endphoneme

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

phoneme 51 // tone: high fall

+ 6
- 4
phsource/phonemes View File

@@ -594,13 +594,13 @@ endphoneme

phoneme ** // TEST flap after consonant
liquid alv
vowelout f1=3 f2=1700 -300 300 f3=-300 80 rms=35 len=15
vowelin f1=0 f2=1700 -300 300 f3=-300 80
vowelout f1=3 f2=1600 -300 300 f3=-300 80 rms=35 len=15
vowelin f1=0 f2=1600 -300 300 f3=-300 80
formants r3/@tap+r3/rx
vowelin f1=0 f2=1700 -300 300 f3=-400 80
vowelin f1=3 f2=1600 -300 300 f3=-300 80
before (i) r3/@tap_i+r3/rx
before (e) r3/@tap_i+r3/rx
vowelin f1=2 f2=1700 -300 300 f3=-300 80
vowelin f1=2 f2=1600 -300 300 f3=-300 80
before (a) r3/@tap+r3/rx
endphoneme

@@ -1270,3 +1270,5 @@ include ph_thai
phonemetable id base2
include ph_indonesian

phonemetable ja base
include ph_japanese

BIN
phsource/r3/@tap View File


BIN
phsource/r3/@tap_i View File


BIN
phsource/vdiph/8u View File


BIN
phsource/vdiph/aoo View File


BIN
phsource/vdiph/ooi_4 View File


BIN
phsource/vdiph2/ei_4 View File


BIN
phsource/vowel/V_6 View File


BIN
phsource/vowel/aa_4 View File


BIN
phsource/vowel/ee View File


BIN
phsource/vowel/i#_5 View File


BIN
phsource/vowel/u#_3 View File


BIN
phsource/vowel/u#_5 View File


BIN
phsource/vowel/u_bck View File


BIN
phsource/vowel/u_unr View File


BIN
phsource/vowel/vowelchart.png View File


BIN
phsource/vwl_en_us/a View File


BIN
phsource/vwl_en_us/ir View File


BIN
phsource/vwl_en_us/or View File


+ 1
- 1
src/dictionary.cpp View File

@@ -177,7 +177,7 @@ int Translator::LoadDictionary(const char *name, int no_error)
length = pw[1];
if(size <= (N_HASH_DICT + sizeof(int)*2))
{
fprintf(stderr,"Empty dictionary: '%s\n",fname);
fprintf(stderr,"Empty _dict file: '%s\n",fname);
return(2);
}
if((pw[0] != N_HASH_DICT) || (length <= 0) || (length > 0x8000000))

+ 21
- 13
src/intonation.cpp View File

@@ -247,7 +247,8 @@ static int drops_0[8] = {0x400,0x400,0x700,0x700,0x700,0xa00,0x1800,0x0e00};

static short oflow[] = {0, 20, 12, 4, 0};
static short oflow_emf[] = {5, 24, 15, 10, 5};
static short oflow_less[] = {1, 17, 10, 5, 1};
static short oflow_less[] = {3, 19, 12, 7, 2};
static short oflow_test2[] = {20, 0, 20, 0, 20};
static short back_emf[] = {35, 32, 0};

typedef struct {
@@ -278,7 +279,7 @@ typedef struct {
unsigned char tail_shape;
} TONE_TABLE;

#define N_TONE_TABLE 11
#define N_TONE_TABLE 13

static TONE_TABLE tone_table[N_TONE_TABLE] = {
{PITCHfall, 30, 5, PITCHfall, 30, 8, // 0 statement
@@ -297,14 +298,14 @@ static TONE_TABLE tone_table[N_TONE_TABLE] = {
20, 25, 34, 22, drops_0, 3, 3, 5, oflow, NULL, 15, 5, 0},


{PITCHfall, 28, 6, PITCHfall, 28, 10, // 5 statement, less intonation
20, 25, 30, 22, drops_0, 4, 3, 5, oflow_less, NULL, 12, 6, 0},
{PITCHfall, 28, 5, PITCHfall, 28, 9, // 5 statement, less intonation
20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less, NULL, 12, 7, 0},

{PITCHfrise2, 33,11, PITCHfall, 28,10, // 6 comma, less intonation
20, 25, 30, 22, drops_0, 4, 3, 5, oflow_less, NULL, 9,14, 0},
{PITCHfrise2, 32,8, PITCHfrise2, 28,9, // 6 comma, less intonation
20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less, NULL, 10,16, 0},

{PITCHfrise2, 28, 7, PITCHfall, 28, 12, // 7 comma, less intonation, less rise
20, 25, 30, 22, drops_0, 4, 3, 5, oflow_less, NULL, 14, 8, 0},
{PITCHfrise2, 28, 7, PITCHfall, 29, 14, // 7 comma, less intonation, less rise
20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less, NULL, 14, 8, 0},

{PITCHrise, 30, 20, PITCHfall, 19, 14, // 8 pitch raises at end of sentence
20, 25, 34, 22, drops_0, 3, 3, 5, oflow, NULL, 24, 30, 0},
@@ -315,6 +316,12 @@ static TONE_TABLE tone_table[N_TONE_TABLE] = {
{PITCHfrise, 39, 15, PITCHfall, 28, 14, // 10 question
20, 25, 34, 22, drops_0, 3, 3, 5, oflow, NULL, 20, 36, 0},

{PITCHfall, 28, 6, PITCHfall, 28, 10, // 11 test
20, 25, 24, 22, drops_0, 3, 3, 5, oflow_less, NULL, 12, 6, 0},

{PITCHfall, 35, 9, PITCHfall, 35, 12, // 12 test
19, 26, 36, 20, drops_0, 2, 4, 5, oflow_test2, NULL, 16, 10, 0},

};

@@ -327,8 +334,9 @@ unsigned char punctuation_to_tone[INTONATION_TYPES][PUNCT_INTONATIONS] = {
{5,7,1,0,0,4},
{8,9,10,3,0,0},
{8,8,10,3,0,0},
{0,1,2,3,0,4},
{0,1,2,3,0,0} };
{11,11,11,11,0,0}, // 6 test
{12,12,12,12,0,0}
};



@@ -738,10 +746,10 @@ void Translator::CalcPitches_Tone(int clause_tone)
PHONEME_TAB *prev2_tph; // 2 tones previous
PHONEME_LIST *prev_p;

int pitch_adjust = 10; // pitch gradient through the clause - inital value
int pitch_adjust = 0; // pitch gradient through the clause - inital value
int pitch_decrement = 0; // decrease by this for each stressed syllable
int pitch_low = 10; // until it drops to this
int pitch_high = 10; // then reset to this
int pitch_low = 0; // until it drops to this
int pitch_high = 0; // then reset to this

p = &phoneme_list[0];


+ 6
- 2
src/readclause.cpp View File

@@ -1759,7 +1759,7 @@ f_input = f_in; // for GetC etc
c2 = GetC();
}

while(!Eof())
while(!Eof() || (ungot_char != 0))
{
if(!iswalnum(c1))
{
@@ -1791,7 +1791,7 @@ f_input = f_in; // for GetC etc

if((option_ssml) && (phoneme_mode==0))
{
if((c1 == '&') && ((c2=='#') || isalpha(c2)))
if((c1 == '&') && ((c2=='#') || ((c2 >= 'a') && (c2 <= 'z'))))
{
n_xml_buf = 0;
c1 = c2;
@@ -1818,6 +1818,10 @@ f_input = f_in; // for GetC etc
{
c1 = j;
}
else
{
c1 = '&';
}
}
if((sayas_mode == 0x14) && (c1 <= 0x20))
{

+ 119
- 12
src/speak_riscos.cpp View File

@@ -76,6 +76,7 @@ char textbuffile[L_tmpnam];
int sample_rate_index; // current value
int current_voice_num=0;
int n_voice_files = 0;
int n_voice_variant_files = 0;

// output sound buffer, 2 bytes per sample
static unsigned short SoundBuf[4096];
@@ -84,7 +85,9 @@ static int callback_inhibit = 0;
static int more_text=0;

#define N_VOICE_NAMES 60
static char *voice_names[40];
#define N_VOICE_VARIANT_NAMES 30
static char *voice_names[N_VOICE_NAMES];
static char *voice_variant_names[N_VOICE_VARIANT_NAMES];

#define N_STATIC_BUF 8000
static char static_buf[N_STATIC_BUF];
@@ -127,9 +130,9 @@ static const char *help_text =
"--punct=\"<characters>\"\n"
"\t Speak the names of punctuation characters during speaking. If\n"
"\t =<characters> is omitted, all punctuation is spoken.\n"
//"--voices=<langauge>\n"
//"\t List the available voices for the specified language.\n"
//"\t If <language> is omitted, then list all voices.\n"
"--voices=<langauge>\n"
"\t List the available voices for the specified language.\n"
"\t If <language> is omitted, then list all voices.\n"
"-k <integer>\n"
"\t Indicate capital letters with: 1=sound, 2=the word \"capitals\",\n"
"\t higher values = a pitch increase (try -k20).\n";
@@ -169,6 +172,7 @@ int GetFileLength(const char *filename)
void ReadVoiceNames2(char *directory)
{//==================================
int len;
int path_len;
int *type;
char *p;
_kernel_swi_regs regs;
@@ -184,6 +188,8 @@ void ReadVoiceNames2(char *directory)
regs.r[5] = sizeof(buf);
regs.r[6] = 0;

path_len = strlen(directory);

while(regs.r[3] > 0)
{
error = _kernel_swi(0x0c+os_X,&regs,&regs); /* OS_GBPB 10, read directory entries */
@@ -202,11 +208,25 @@ void ReadVoiceNames2(char *directory)
}
else
{
p = Alloc(len+1);
p = (char *)malloc(len+1);
strcpy(p,&buf[20]);
voice_names[n_voice_files++] = p;
if(n_voice_files >= (N_VOICE_NAMES-1))
break;

if(strcmp(&directory[path_len-3],".!v")==0)
{
if(n_voice_variant_files >= (N_VOICE_VARIANT_NAMES-1))
continue;
voice_variant_names[n_voice_variant_files++] = p;
}
else
{
if(n_voice_files >= (N_VOICE_NAMES-1))
continue;
voice_names[n_voice_files++] = p;
if(strcmp(p,"en")==0)
{
voice_names[n_voice_files++] = "en+f2";
}
}
}
}
}
@@ -216,13 +236,15 @@ void ReadVoiceNames()
{//===================
char directory[sizeof(path_home)+10];

for(n_voice_files=0; n_voice_files<N_VOICE_NAMES; n_voice_files++)
voice_names[n_voice_files] = NULL;

n_voice_files = 0;
n_voice_variant_files = 0;

sprintf(directory,"%s.voices",path_home);

ReadVoiceNames2(directory);

voice_names[n_voice_files] = NULL;
voice_variant_names[n_voice_variant_files] = NULL;
}


@@ -557,10 +579,13 @@ void set_say_options(int reg2, int reg3)
void jsd_swi_functions(int *r)
/****************************/
{
espeak_VOICE voice_select;

switch(r[0])
{
case 0: /* major version */
r[0] = 3;
r[0] = 4;
r[1] = 331;
break;

case 1: /* register user */
@@ -579,6 +604,7 @@ void jsd_swi_functions(int *r)

case 5: /* get table of voice names */
r[0] = (int)voice_names;
r[1] = (int)voice_variant_names;
break;

case 6: /* update voice data, r1 = voice_number */
@@ -594,6 +620,15 @@ void jsd_swi_functions(int *r)
// init_voice((char *)r[1]);
break;

case 8:
// list voices, r[1] contains optional language name (or "variant")
voice_select.languages = (char *)r[1];
voice_select.age = 0;
voice_select.gender = 0;
voice_select.name = NULL;
r[0] = (int)espeak_ListVoices(&voice_select);
break;

default:
r[0] = 0;
r[1] = 0;
@@ -709,6 +744,72 @@ void PitchAdjust(int pitch_adjustment)



void DisplayVoices(FILE *f_out, char *language)
{//============================================
int ix;
const char *p;
int len;
int count;
int scores = 0;
const espeak_VOICE *v;
const char *lang_name;
char age_buf[12];
const espeak_VOICE **voices;
espeak_VOICE voice_select;

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

if(language[0] == '=')
{
// display only voices for the specified language, in order of priority
voice_select.languages = &language[1];
voice_select.age = 0;
voice_select.gender = 0;
voice_select.name = NULL;
voices = espeak_ListVoices(&voice_select);
scores = 1;
}
else
{
voices = espeak_ListVoices(NULL);
}

fprintf(f_out,"Pty Language Age/Gender VoiceName File Other Langs\n");

for(ix=0; (v = voices[ix]) != NULL; ix++)
{
count = 0;
p = v->languages;
while(*p != 0)
{
len = strlen(p+1);
lang_name = p+1;

if(v->age == 0)
strcpy(age_buf," ");
else
sprintf(age_buf,"%3d",v->age);

if(count==0)
{
fprintf(f_out,"%2d %-12s%s%c %-17s %-11s ",
p[0],lang_name,age_buf,genders[v->gender],v->name,v->identifier);
}
else
{
fprintf(f_out,"(%s %d)",lang_name,p[0]);
}
count++;
p += len+2;
}
// if(scores)
// fprintf(f_out,"%3d ",v->score);
fputc('\n',f_out);
}
} // end of DisplayVoices



char *param_string(char **argp)
{//============================
char *p;
@@ -860,6 +961,12 @@ void command_line(char *arg_string, int wait)
return;
}
else
if(memcmp(command,"voices",6)==0)
{
DisplayVoices(stdout,&command[6]);
return;
}
else
if(strcmp(command,"help")==0)
{
printf("\nspeak text-to-speech: %s\n%s",version_string,help_text);

+ 1
- 1
src/synthdata.cpp View File

@@ -35,7 +35,7 @@
#include "translate.h"
#include "wave.h"

const char *version_string = "1.31.01 23.Jan.08";
const char *version_string = "1.31.03 26.Jan.08";
const int version_phdata = 0x013100;

int option_device_number = -1;

+ 6
- 1
src/tr_languages.cpp View File

@@ -269,7 +269,7 @@ Translator *SelectTranslator(const char *name)
case L('f','r'): // french
{
static const short stress_lengths_fr[8] = {190, 170, 190, 200, 0, 0, 235, 235};
static const unsigned char stress_amps_fr[8] = {16,14, 20,20, 20,24, 24,22 };
static const unsigned char stress_amps_fr[8] = {18,16, 20,20, 20,22, 22,22 };

tr = new Translator();
SetupTranslator(tr,stress_lengths_fr,stress_amps_fr);
@@ -421,6 +421,11 @@ SetLengthMods(tr,3); // all equal
}
break;

case L('j','a'): // TEST
tr = new Translator();
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
break;

case L_jbo: // Lojban
{
static const short stress_lengths_jbo[8] = {185,170, 200,200, 0,0, 290,300};

+ 2
- 0
src/voice.h View File

@@ -38,6 +38,8 @@ typedef struct {
int peak_shape; // alternative shape for formant peaks (0=standard 1=squarer)
int voicing; // 100% = 64, level of formant-synthesized sound
int formant_factor; // adjust nominal formant frequencies by this because of the voice's pitch (256ths)
int consonant_amp; // amplitude of unvoiced consonants
int consonant_ampv; // amplitude of the noise component of voiced consonants

// parameters used by Wavegen
short freq[N_PEAKS]; // 100% = 256

+ 65
- 5
src/voices.cpp View File

@@ -29,7 +29,9 @@
#ifdef PLATFORM_WINDOWS
#include "windows.h"
#else
#ifndef PLATFORM_RISCOS
#ifdef PLATFORM_RISCOS
#include "kernel.h"
#else
#include "dirent.h"
#endif
#endif
@@ -103,7 +105,7 @@ espeak_VOICE voice_selected;

// these need a phoneme table to have been specified
#define V_REPLACE 28
#define V_CONSONANTS 29


typedef struct {
@@ -141,6 +143,7 @@ static keywtab_t keyword_tab[] = {
{"numbers", V_NUMBERS},
{"option", V_OPTION},
{"mbrola", V_MBROLA},
{"consonants", V_CONSONANTS},

// these just set a value in langopts.param[]
{"l_dieresis", 0x100+LOPT_DIERESES},
@@ -368,6 +371,9 @@ void VoiceReset(int tone_only)
voice->n_harmonic_peaks = 5;
voice->peak_shape = 1;
voice->voicing = 64;
voice->consonant_amp = 100;
voice->consonant_ampv = 100;

#ifdef PLATFORM_RISCOS
voice->roughness = 1;
#else
@@ -836,6 +842,10 @@ voice_t *LoadVoice(const char *vname, int control)
voice->breathw[0] = Read8Numbers(p,&voice->breathw[1]);
break;

case V_CONSONANTS:
value = sscanf(p,"%d %d",&voice->consonant_amp, &voice->consonant_ampv);
break;

case V_MBROLA:
{
int srate = 16000;
@@ -937,8 +947,10 @@ char *ExtractVoiceVariantName(char *vname, int variant_num)

char *p;
static char variant_name[20];
char variant_prefix[5];

variant_name[0] = 0;
sprintf(variant_prefix,"!v%c",PATHSEP);

if(vname != NULL)
{
@@ -953,7 +965,7 @@ char *ExtractVoiceVariantName(char *vname, int variant_num)
else
{
// voice variant name, not number
strcpy(variant_name,"!v/");
strcpy(variant_name,variant_prefix);
strncpy0(&variant_name[3],p,sizeof(variant_name)-3);
}
}
@@ -962,9 +974,9 @@ char *ExtractVoiceVariantName(char *vname, int variant_num)
if(variant_num > 0)
{
if(variant_num < 10)
sprintf(variant_name,"!v/m%d",variant_num); // male
sprintf(variant_name,"%sm%d",variant_prefix, variant_num); // male
else
sprintf(variant_name,"!v/f%d",variant_num-10); // female
sprintf(variant_name,"%sf%d",variant_prefix, variant_num-10); // female
}

return(variant_name);
@@ -1409,6 +1421,54 @@ void GetVoices(const char *path)
char fname[sizeof(path_home)+100];

#ifdef PLATFORM_RISCOS
int len;
int *type;
char *p;
_kernel_swi_regs regs;
_kernel_oserror *error;
char buf[80];
char directory2[sizeof(path_home)+100];

regs.r[0] = 10;
regs.r[1] = (int)path;
regs.r[2] = (int)buf;
regs.r[3] = 1;
regs.r[4] = 0;
regs.r[5] = sizeof(buf);
regs.r[6] = 0;

while(regs.r[3] > 0)
{
error = _kernel_swi(0x0c+0x20000,&regs,&regs); /* OS_GBPB 10, read directory entries */
if((error != NULL) || (regs.r[3] == 0))
{
break;
}
type = (int *)(&buf[16]);
len = strlen(&buf[20]);
sprintf(fname,"%s.%s",path,&buf[20]);

if(*type == 2)
{
// a sub-directory
GetVoices(fname);
}
else
{
// a regular line, add it to the voices list
if((f_voice = fopen(fname,"r")) == NULL)
continue;
// pass voice file name within the voices directory
voice_data = ReadVoiceFile(f_voice, fname+len_path_voices, &buf[20]);
fclose(f_voice);

if(voice_data != NULL)
{
voices_list[n_voices_list++] = voice_data;
}
}
}
#else
#ifdef PLATFORM_WINDOWS
WIN32_FIND_DATA FindFileData;

+ 18
- 10
src/wavegen.cpp View File

@@ -748,12 +748,6 @@ void WavegenInit(int rate, int wavemult_fact)
for(ix=0; ix<N_EMBEDDED_VALUES; ix++)
embedded_value[ix] = embedded_default[ix];

if(rate <= 11000)
{
// adjust some parameters for telephony with low sample rates
consonant_amp = 50;
option_harmonic1 = 6;
}

// set up window to generate a spread of harmonics from a
// single peak for HF peaks
@@ -1011,7 +1005,7 @@ static void AdvanceParameters()
} // end of AdvanceParameters


#ifndef PLATFORM_RISCOS
static double resonator(RESONATOR *r, double input)
{//================================================
double x;
@@ -1055,11 +1049,12 @@ static void setresonator(RESONATOR *rp, int freq, int bwidth, int init)
// a = 1.0 - b - c
rp->a = 1.0 - rp->b - rp->c;
} // end if setresonator
#endif


void InitBreath(void)
{//==================
#ifndef PLATFORM_RISCOS
int ix;

minus_pi_t = -PI / samplerate;
@@ -1069,12 +1064,14 @@ void InitBreath(void)
{
setresonator(&rbreath[ix],2000,200,1);
}
#endif
} // end of InitBreath



void SetBreath()
{//=============
#ifndef PLATFORM_RISCOS
int pk;

if(wvoice->breath[0] == 0)
@@ -1089,15 +1086,17 @@ void SetBreath()
setresonator(&rbreath[pk], peaks[pk].freq >> 16, wvoice->breathw[pk],0);
}
}
#endif
} // end of SetBreath


int ApplyBreath(void)
{//==================
int value = 0;
#ifndef PLATFORM_RISCOS
int noise;
int ix;
int amp;
int value = 0;

// use two random numbers, for alternate formants
noise = (rand() & 0x3fff) - 0x2000;
@@ -1110,6 +1109,7 @@ int ApplyBreath(void)
value += int(resonator(&rbreath[ix],noise) * amp);
}
}
#endif
return (value);
}

@@ -1320,10 +1320,12 @@ int Wavegen()
total = (total >> 6) * voicing;
}

#ifndef PLATFORM_RISCOS
if(wvoice->breath[0])
{
total += ApplyBreath();
}
#endif

// mix with sampled wave if required
z2 = 0;
@@ -1558,6 +1560,12 @@ void WavegenSetVoice(voice_t *v)
else
pk_shape = pk_shape2;

consonant_amp = (v->consonant_amp * 26) /100;
if(samplerate <= 11000)
{
consonant_amp = consonant_amp*2; // emphasize consonants at low sample rates
option_harmonic1 = 6;
}
WavegenSetEcho();
}

@@ -1571,7 +1579,7 @@ static void SetAmplitude(int length, unsigned char *amp_env, int value)
amp_inc = (256 * ENV_LEN * STEPSIZE)/length;

amplitude = (value * general_amplitude)/16;
amplitude_v = amplitude * 15; // for wave mixed with voiced sounds
amplitude_v = (amplitude * wvoice->consonant_ampv * 15)/100; // for wave mixed with voiced sounds

amplitude_env = amp_env;
}

Loading…
Cancel
Save