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-fd96e6ae7743master
@@ -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 | |||
@@ -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 |
@@ -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 |
@@ -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 |
@@ -129,7 +129,7 @@ | |||
_) r (_ E*e | |||
r R | |||
_) r R | |||
A) r (A * | |||
A) r (A ** | |||
C) r (A @-* | |||
rr *R | |||
@@ -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~ | |||
@@ -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 | |||
@@ -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_ | |||
@@ -639,7 +639,7 @@ _charak) te (r te | |||
.group | |||
ě e | |||
ů u: // czech | |||
$ dola:r | |||
% pertsento | |||
+ plus | |||
$ dola:R | |||
% peRtsento | |||
D_) % peRtsent | |||
@@ -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 |
@@ -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 | |||
@@ -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 | |||
@@ -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 |
@@ -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 |
@@ -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)) |
@@ -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]; | |||
@@ -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)) | |||
{ |
@@ -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,®s,®s); /* 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); |
@@ -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; |
@@ -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}; |
@@ -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 |
@@ -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,®s,®s); /* 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; |
@@ -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; | |||
} |