mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 05:35:35 +00:00
[1.31.07]
intonation: changed comma intonation for intonation type 2. intonation: adjusted exclamation (make the nuclear syllable emphasized). intonation: split intonation table into body and nucleus parts. lang-zh: only length tones 2,3 at end of sentence. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@137 d46cf337-b52f-0410-862d-fd96e6ae7743
This commit is contained in:
@@ -115,11 +115,11 @@ 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 n2 n^ p r R s S
|
||||
t t2 tS v w z Z z2
|
||||
z3
|
||||
* : ; b c d D dZ
|
||||
f g h j k l L m
|
||||
n N n2 n^ p p2 r R
|
||||
s S t t2 tS v w z
|
||||
Z z2 z3
|
||||
|
||||
|
||||
Dictionary hi_dict
|
||||
@@ -342,9 +342,9 @@ i i. i[ iou o o- ou u
|
||||
uai y
|
||||
|
||||
(u) : f h j k kh l
|
||||
m n N p ph r s s.
|
||||
S; t th ts ts. ts. tS; tS;
|
||||
tsh v w x z z.
|
||||
m n N p ph r s S#
|
||||
s. S; t th ts ts. ts. tS;
|
||||
tS; tsh v w x z z.
|
||||
|
||||
|
||||
Dictionary jbo_dict
|
||||
|
||||
+15
-3
@@ -5,7 +5,7 @@
|
||||
|
||||
// 2006-11-18 Gilles Casse <gcasse@oralux.org>
|
||||
//
|
||||
// Updated 2008-01-29 Michel Such <michel.such@free.fr>
|
||||
// Updated 2008-02-06 Michel Such <michel.such@free.fr>
|
||||
//
|
||||
// * Numbers, a few abbreviations and exceptions.
|
||||
//
|
||||
@@ -299,7 +299,7 @@ des dez2 $u $nounf
|
||||
?2 des dez2 $u+ $nounf
|
||||
|
||||
|
||||
à $u $brk
|
||||
à $u
|
||||
au $u $brk
|
||||
aux $u $brk
|
||||
|
||||
@@ -309,6 +309,7 @@ par $u
|
||||
pour $u
|
||||
en $u
|
||||
(en effet) A~nEf'E $brk
|
||||
(en suspens) A~||sysp'A~
|
||||
|
||||
vers $u
|
||||
avec $u
|
||||
@@ -371,6 +372,7 @@ y i:gR'Ek $atend
|
||||
consent kO~s'A~t2
|
||||
scient si
|
||||
bénéficient benefisi $verb
|
||||
charisme karism
|
||||
concurrent kO~kyR'A~
|
||||
content kO~t@-t2 $verb
|
||||
couvent k'uvt2 $verb
|
||||
@@ -431,7 +433,9 @@ souris suri
|
||||
|
||||
|
||||
|
||||
mens mA~z2
|
||||
sens sA~s
|
||||
sens sA~z2 $verb
|
||||
c'est sEt2 $u+
|
||||
qu'à ka
|
||||
m'y mi $verbf
|
||||
@@ -518,7 +522,6 @@ bluetooth blut'us
|
||||
boy bOj
|
||||
byte bajt
|
||||
bytes bajts
|
||||
cleaner kli:n@r
|
||||
(cyber link) sibEr||link
|
||||
debian dEbjAn
|
||||
driver drajv@rz2
|
||||
@@ -527,14 +530,19 @@ emacs Emaks
|
||||
emacspeak Emakspi:k
|
||||
espeak @spi:k
|
||||
ethernet etERnEt
|
||||
exit egzit
|
||||
firefox faj@RfOks
|
||||
(fire wire) faj@R||wajr
|
||||
firewire faj@Rwajr
|
||||
google gu:g'@l
|
||||
girl g@Rl
|
||||
gnome gnom
|
||||
gnu gnu
|
||||
hamburger _!A~b@rg@r
|
||||
insight insajt
|
||||
internet E~tERnEt
|
||||
(internet explorer) E~tErn'Et||EksplOr'@r
|
||||
klaxon klaksOn
|
||||
leader li:d@R
|
||||
light lajt
|
||||
link link
|
||||
@@ -549,6 +557,7 @@ movy mu:v'i
|
||||
new nj'u
|
||||
news nj'uz
|
||||
night najt
|
||||
not nOt
|
||||
ok oke
|
||||
open Op'@n
|
||||
outlook autluk
|
||||
@@ -565,11 +574,13 @@ spybot spajbOt
|
||||
sun s@n
|
||||
sunlight s@nlajt
|
||||
(text aloud) tEkst||@lawd
|
||||
then DEn $u
|
||||
thunderbird f@ndERb@Rd
|
||||
ubuntu ubuntu
|
||||
update @pd'E:jt
|
||||
upload @plod
|
||||
viavoice viavOjs
|
||||
while wajll
|
||||
windows windoz
|
||||
word wWRd
|
||||
wright _^_EN
|
||||
@@ -632,3 +643,4 @@ vincent vE~sA~
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+38
-21
@@ -3,7 +3,7 @@
|
||||
|
||||
// 2006-11-18 Gilles Casse <gcasse@oralux.org>
|
||||
//
|
||||
// Updated: 2008-02-04 Michel Such <michel.such@free.fr>
|
||||
// Updated: 2008-02-06 Michel Such <michel.such@free.fr>
|
||||
//
|
||||
// * The rules are based on Cicero TTS.
|
||||
//
|
||||
@@ -28,6 +28,8 @@
|
||||
a (il_ a
|
||||
aie (me E // paiement
|
||||
ai E // aile
|
||||
a (lk O // talk
|
||||
a (ll_ O // football handball
|
||||
am (b A~ // jambon
|
||||
am (p A~ // camp
|
||||
am (m a // programmation
|
||||
@@ -58,11 +60,14 @@
|
||||
cch k // bacchanale
|
||||
cc (Y ks // accéder
|
||||
cc k // occuper
|
||||
ar) ch (éo k // archéologue
|
||||
ar) ch (ét k // archétype architecte
|
||||
_A) ch (o_ k // écho
|
||||
_eu) ch (ari k // eucharistie
|
||||
or) ch (esC k // orchestre
|
||||
or) ch (iC k // orchidée
|
||||
sy) ch (o k // psycho
|
||||
_) ch (ao k // chaos, chaotique
|
||||
_) ch (or k // chorale
|
||||
ch (r k // chrétien
|
||||
ch (l k
|
||||
@@ -98,6 +103,8 @@
|
||||
Csan) d (_ d
|
||||
_tan) d (_ d // stand
|
||||
Ctan) d (_ d
|
||||
for) d (_ d
|
||||
lor) d (_ d
|
||||
|
||||
Can) d (_ t2 // grand ami, grand marchand
|
||||
Cen) d (_ t2
|
||||
@@ -116,6 +123,8 @@
|
||||
.group e
|
||||
e (Ce_ E
|
||||
eau o // bateau cheveaux
|
||||
Cr) ea (m i: // stream
|
||||
Cl) ea (n i: // clean
|
||||
j) e (a // Jean Jeanne
|
||||
sp) ea (k i: // speak speaker
|
||||
p) ect (_ E // suspect
|
||||
@@ -124,7 +133,9 @@
|
||||
_pi) ed e // pied
|
||||
ee i: // meeting
|
||||
_cl) ef (_ e // clef
|
||||
k) e (r_ @ // maker
|
||||
Ck) e (r_ @ // worker, talker
|
||||
eaC) e (r_ @ // speaker, streamer
|
||||
ooC) e (r_ @ // scooter
|
||||
ein (C E~ // peindre
|
||||
ein (_ E~
|
||||
e (il E // vieille
|
||||
@@ -199,17 +210,18 @@
|
||||
Ci) en (C E~ // tien
|
||||
Ci) en (c A~ // science
|
||||
|
||||
_am) en (_ En // amen
|
||||
|
||||
AA) en (_ E~
|
||||
AC) en (_ E~ // examen
|
||||
C) en (_ En // amen, abdomen, golden
|
||||
xam) en (_ E~ // examen
|
||||
CA) en (_ E~ // rien
|
||||
CC) en (_ E~
|
||||
|
||||
en (s_ A~
|
||||
en (CA A~ // pentathlon
|
||||
en (CC A~ // entre
|
||||
en (ch_ En // french
|
||||
sp) ens (_ Ens // suspens
|
||||
éC) ens (_ A~z2 // dépens démens
|
||||
|
||||
_C) er (_ ER // fer
|
||||
_Ch) er (_ ER // cher
|
||||
@@ -395,6 +407,7 @@ _) h (ac _! // hache
|
||||
_) h (ai _! // haine haillon
|
||||
_) h (al _! // halte
|
||||
_) h (amea _! // hameau
|
||||
_) h (amb _! // hamburger
|
||||
_) h (amp _! // hampe
|
||||
_) h (an _! // hanche
|
||||
_) h (app _! // happer
|
||||
@@ -412,6 +425,7 @@ _) h (eurt _! // heurter
|
||||
_) h (ibo _! // hibou
|
||||
_) h (ide _! // hideux
|
||||
_) h (oll _! // hollandais
|
||||
_) h (oma _! // homard
|
||||
_) h (ong _! // hongrois
|
||||
_) h (ont _! // honte
|
||||
_) h (ord _! // horde
|
||||
@@ -527,7 +541,6 @@ _) h (utte_ _! // hutte
|
||||
o (mm O // comme
|
||||
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
|
||||
n) om (_ O~ // nom
|
||||
@@ -538,32 +551,34 @@ _) h (utte_ _! // hutte
|
||||
onh (A On // bonhomme
|
||||
|
||||
_b) on (_A On // liaison: bon élève
|
||||
_m) on (_A O~n // mon appui
|
||||
_s) on (_A O~n
|
||||
_t) on (_A O~n
|
||||
_b) on (_h O~n2 // liaison: bon hiver
|
||||
_C) on (_ O~n2 // mon appui, mon histoire, mon havre
|
||||
_c) on (_ O~ // no comment
|
||||
|
||||
z) o (ne_ o // amazone
|
||||
c) o (ne_ o
|
||||
h) o (ne_ o
|
||||
ph) o (ne_ O // téléphone
|
||||
r) o (ne_ o
|
||||
z) o (nes_ o
|
||||
c) o (nes_ o
|
||||
h) o (nes_ o
|
||||
r) o (nes_ o
|
||||
|
||||
alc) oo (l O // alcool
|
||||
oo (Ce u // boomer
|
||||
C) oot ut // bootable football
|
||||
z) oo o // zoo
|
||||
z) oo (l oo // zoologue
|
||||
z) oo (m u // zoom
|
||||
oo (X u // pool
|
||||
_gal) op (_ o // galop
|
||||
|
||||
_sir) op (_ o // sirop
|
||||
|
||||
_tr) op (_ o // trop
|
||||
_tr) op (_ op2 // trop
|
||||
v) ost (_ o // Prévost
|
||||
o (sA o // poser
|
||||
ot (_ o // mot dépots
|
||||
c) oup (_ u // beaucoup
|
||||
l) oup (_ u // loups
|
||||
C) ou (nd aw // sound, found
|
||||
_C) oup (_ u // coup, loup
|
||||
uC) oup (_ up2 // beaucoup
|
||||
|
||||
|
||||
ou u // hibou brouillard
|
||||
@@ -612,12 +627,13 @@ _) h (utte_ _! // hutte
|
||||
|
||||
.group q
|
||||
q k // coq
|
||||
_a) qu (a ku // aquarium
|
||||
_a) qu (if ku // aquifère
|
||||
_a) qu (a kw // aquarium
|
||||
_a) qu (if kw // aquifère
|
||||
_A) qu (idist ky // équidistant
|
||||
_A) qu (ilat ky // équilatéralt
|
||||
_C) qu (a ku // squale square
|
||||
_A) qu (a ku // équateur
|
||||
_A) qu (ilat ky // équilatéral
|
||||
_C) qu (a kw // squale square
|
||||
_A) qu (a kw // équateur
|
||||
_) qu (artz kw // quartz
|
||||
qu k // quatre
|
||||
_) que (_ k@ // que
|
||||
_) qu' (P3 k // qu'il
|
||||
@@ -764,6 +780,7 @@ C) te (_ t@- // patte
|
||||
uc) un (_ W~n2 // aucun
|
||||
un (_ W~n2 // un avion
|
||||
|
||||
fl) ux (_ y // flux, reflux
|
||||
g) u (A // fatigue
|
||||
g) u (ï y // ambiguïté
|
||||
g) u (ë y // ambiguë
|
||||
|
||||
@@ -45,6 +45,8 @@
|
||||
// (D will match on a digit and also if no digit is present. (special for tone
|
||||
language).
|
||||
|
||||
// 儿 兒 erhua
|
||||
|
||||
.group a
|
||||
a A
|
||||
ai ai
|
||||
@@ -189,6 +191,9 @@ language).
|
||||
ue yE //üe
|
||||
ui uei
|
||||
u (DnK u@
|
||||
k) u (DnK wu@
|
||||
_h) u (DnK wu@
|
||||
t) u (DnK wu@
|
||||
uo uo
|
||||
|
||||
L01) u y /// j,q,x,y + u
|
||||
|
||||
@@ -3,4 +3,4 @@ name french
|
||||
gender male
|
||||
|
||||
dictrules 1
|
||||
intonation 3
|
||||
intonation 2
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
name Mandarin test
|
||||
name Mandarin
|
||||
language zh
|
||||
gender male
|
||||
words 1
|
||||
pitch 80 118
|
||||
|
||||
//for some dialects
|
||||
|
||||
//[en]: replace ng with n
|
||||
//[zh]: 无后鼻音,ng读成n
|
||||
//[zh]: ��������ng���n
|
||||
//replace 0 N n
|
||||
|
||||
//[en]: replace rfx consonants
|
||||
//[zh]: 无卷舌音,r读成l或z,er读成e
|
||||
//[zh]: ��������r���l��z��er���e
|
||||
//replace 0 ts.h tsh
|
||||
//replace 0 ts. ts
|
||||
//replace 0 s. s
|
||||
@@ -20,10 +21,10 @@ words 1
|
||||
//replace 0 @r @
|
||||
|
||||
//[en]: replace beginning n or l
|
||||
//[zh]: 不分nl,n读成l或l读成n
|
||||
//[zh]: ����nl��n���l��l���n
|
||||
//replace 2 n l
|
||||
//replace 2 l n
|
||||
|
||||
//[en]: replace beginning w with v
|
||||
//[zh]: w读成v
|
||||
//[zh]: w���v
|
||||
//replace 0 w v
|
||||
+10
-6
@@ -15,8 +15,8 @@
|
||||
eo 13 111
|
||||
jbo 4 112
|
||||
fi 40 130
|
||||
fr 43 124
|
||||
fr_ca 11 124
|
||||
fr 44 125
|
||||
fr_ca 11 125
|
||||
hi 50 135
|
||||
ta 15 137
|
||||
hu 23 115
|
||||
@@ -41,7 +41,7 @@
|
||||
is 32 124
|
||||
vi 42 137
|
||||
zhy 40 132
|
||||
zh 62 147
|
||||
zh 64 148
|
||||
sw 14 108
|
||||
th 50 142
|
||||
id 14 120
|
||||
@@ -180,6 +180,7 @@ dzh/xdzh [dZ] base
|
||||
[dZ;] ru
|
||||
dzh/xdz_pzd [J] base
|
||||
[J2] hi
|
||||
envelope/i_risefall [11] zh
|
||||
envelope/p_214 [214] zh
|
||||
[5] th
|
||||
envelope/p_451 [3] th
|
||||
@@ -188,7 +189,6 @@ envelope/p_fall [2] vi
|
||||
[7] vi
|
||||
[1] zhy
|
||||
[4] zhy
|
||||
[11] zh
|
||||
[21] zh
|
||||
[51] zh
|
||||
[22] zh
|
||||
@@ -415,7 +415,6 @@ n^/n^i [(i)] base
|
||||
n/ni [(i)] base
|
||||
[n] zh
|
||||
nn/inn [(i)] base
|
||||
[N] zh
|
||||
n/nj [n] base
|
||||
[n.] base
|
||||
[n^] base
|
||||
@@ -601,6 +600,8 @@ ufric/sh_pzd [S;] base
|
||||
ufric/sh_pzd_ [S;] base
|
||||
[Z;] base
|
||||
ufric/sh_rfx [s.] base
|
||||
[s.] zh
|
||||
ufric/sh_sr [S#] zh
|
||||
ufric/sh_sr.wav [S] sr
|
||||
[Z] sr
|
||||
[dZ] sr
|
||||
@@ -693,11 +694,13 @@ ustop/k_unasp_ [k] zh
|
||||
ustop/null [?] base
|
||||
ustop/p [p] base
|
||||
[p] fr
|
||||
[p2] fr
|
||||
[ph] hi
|
||||
[p] zhy
|
||||
[ph] th
|
||||
ustop/p_ [p] base
|
||||
[p] fr
|
||||
[p2] fr
|
||||
[ph] hi
|
||||
[ph] zh
|
||||
ustop/percus10 [(X1] base
|
||||
@@ -1242,6 +1245,7 @@ vowel/a_3 [a] en_sc
|
||||
[a:] cs
|
||||
[a:] la
|
||||
[a] is
|
||||
[A] zh
|
||||
vowel/a#_3 [a2] en
|
||||
[a2] en_n
|
||||
[a2] en_us
|
||||
@@ -1267,7 +1271,6 @@ vowel/aa [a] fi
|
||||
[A] no
|
||||
[A:] no
|
||||
[aa] zhy
|
||||
[A] zh
|
||||
vowel/aa# [0] en_wi
|
||||
[a2] fi
|
||||
vowel/aa_2 [A:] en
|
||||
@@ -1649,6 +1652,7 @@ vowel/uu_2 [U] base2
|
||||
[U] ta
|
||||
[U] tr
|
||||
vowel/uu_3 [u] af
|
||||
[y] zh
|
||||
vowel/uu_4 [U] fi
|
||||
[U] sv
|
||||
vowel/uu_bck [U] en_n
|
||||
|
||||
+13
-1
@@ -121,7 +121,7 @@ endphoneme
|
||||
phoneme A~
|
||||
vowel starttype (a) endtype (a)
|
||||
length 180
|
||||
formants vnasal/aa_n2
|
||||
formants vnasal/aa_n2 // silent unless followed by vowel
|
||||
endphoneme
|
||||
|
||||
|
||||
@@ -292,6 +292,17 @@ phoneme p
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme p2 // silent unless followed by vowel
|
||||
beforenotvowel NULL
|
||||
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
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme r
|
||||
vcd uvl frc starttype r endtype r
|
||||
vowelin f1=0 f2=800 -100 100 f3=-400 100
|
||||
@@ -420,3 +431,4 @@ phoneme z3 // "six" and "dix". [s] before pause, [z] before vowel, else []
|
||||
endphoneme
|
||||
|
||||
|
||||
|
||||
|
||||
+27
-8
@@ -5,7 +5,7 @@
|
||||
|
||||
phoneme 11 // tone: low level
|
||||
stress
|
||||
tone 12 9 envelope/p_fall NULL
|
||||
tone 12 9 envelope/i_risefall NULL
|
||||
endphoneme
|
||||
|
||||
phoneme 21 // tone: low fall
|
||||
@@ -125,7 +125,7 @@ phoneme k
|
||||
vowelin f1=1 f2=1700 0 200 f3=-300 80 f4
|
||||
vowelout f1=1 f2=1700 0 200 f3=-300 80 f4 rms=30
|
||||
lengthmod 2
|
||||
wave ustop/k_unasp_
|
||||
wave ustop/k_unasp_%75
|
||||
endphoneme
|
||||
|
||||
phoneme kh
|
||||
@@ -157,12 +157,30 @@ phoneme S;
|
||||
wave ufric/sh_pzd
|
||||
endphoneme
|
||||
|
||||
phoneme S#
|
||||
vls pla frc sibilant
|
||||
vowelin f1=0 f2=2700 400 600 f3=300 80
|
||||
lengthmod 2
|
||||
wave ufric/sh_sr%20
|
||||
endphoneme
|
||||
|
||||
phoneme s.
|
||||
vls pla frc sibilant
|
||||
vowelin f1=0 f2=1800 -100 300 f3=-300 80
|
||||
vowelout f1=0 f2=1800 -100 300 f3=-300 80
|
||||
length 100
|
||||
lengthmod 3
|
||||
wave ufric/sh_rfx%60 // quieter
|
||||
before _ ufric/sh_rfx%50
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme ts
|
||||
vls alv afr sibilant
|
||||
vowelin f1=0 f2=1700 -300 300 f3=-100 80
|
||||
vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
|
||||
lengthmod 2
|
||||
wave ustop/ts_unasp%50
|
||||
wave ustop/ts_unasp%70
|
||||
endphoneme
|
||||
|
||||
phoneme tsh
|
||||
@@ -212,12 +230,12 @@ endphoneme
|
||||
|
||||
phoneme N //should be more different from n
|
||||
vcd vel nasal
|
||||
vowelout f1=2 f2=1900 200 400 f3=400 80 len=50 rms=15 brk
|
||||
vowelout f1=2 f2=1900 0 300 f3=400 80 len=50 rms=15 brk
|
||||
formants NULL
|
||||
before _ nn/nn2_
|
||||
after _ nn/_nn
|
||||
lengthmod 7
|
||||
after (i) nn/inn
|
||||
// after (i) nn/inn
|
||||
endphoneme
|
||||
|
||||
phoneme a
|
||||
@@ -230,7 +248,7 @@ endphoneme
|
||||
phoneme A
|
||||
vowel starttype (a) endtype (a)
|
||||
length 250
|
||||
formants vowel/aa
|
||||
formants vowel/a_3
|
||||
before N vowel/aa_2
|
||||
endphoneme
|
||||
|
||||
@@ -367,7 +385,7 @@ endphoneme
|
||||
|
||||
phoneme u@
|
||||
vowel starttype (u) endtype (@)
|
||||
length 250
|
||||
length 230
|
||||
formants vdiph2/o@
|
||||
endphoneme
|
||||
|
||||
@@ -384,9 +402,10 @@ phoneme uo
|
||||
endphoneme
|
||||
|
||||
phoneme y
|
||||
vowel starttype (i) endtype (i)
|
||||
vowel starttype (i) endtype (u)
|
||||
length 250
|
||||
formants vowel/y_2
|
||||
before N vowel/uu_3
|
||||
endphoneme
|
||||
|
||||
phoneme yu //try more before N
|
||||
|
||||
Binary file not shown.
Binary file not shown.
+3
-100
@@ -83,6 +83,7 @@ extern int Read4Bytes(FILE *f);
|
||||
extern void MakeVowelLists(void);
|
||||
extern void FindPhonemesUsed(void);
|
||||
extern void DrawEnvelopes();
|
||||
extern int LoadEnvelope2(FILE *f, const char *fname);
|
||||
extern int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, char *fname, int flags);
|
||||
|
||||
static int markers_used[8];
|
||||
@@ -101,6 +102,7 @@ typedef struct {
|
||||
int n_envelopes = 0;
|
||||
char envelope_paths[N_ENVELOPES][80];
|
||||
unsigned char envelope_dat[N_ENVELOPES][ENV_LEN];
|
||||
FILE *f_phdata;
|
||||
|
||||
|
||||
|
||||
@@ -132,7 +134,6 @@ private:
|
||||
int LoadSpect(const char *path, int control);
|
||||
int LoadWavefile(FILE *f, const char *fname);
|
||||
int LoadEnvelope(FILE *f, const char *fname);
|
||||
int LoadEnvelope2(FILE *f, const char *fname);
|
||||
int LoadDataFile(const char *path, int control);
|
||||
int AddSpect(int phcode, int *list, int control);
|
||||
void AddSpectList(int *list, int control);
|
||||
@@ -142,7 +143,6 @@ private:
|
||||
|
||||
|
||||
FILE *f_in;
|
||||
FILE *f_phdata;
|
||||
FILE *f_phcontents;
|
||||
FILE *f_errors;
|
||||
FILE *f_phindex;
|
||||
@@ -1707,105 +1707,8 @@ void Compile::CPhonemeFiles()
|
||||
} // end of CPhonemeFiles
|
||||
|
||||
|
||||
//#define MAKE_ENVELOPES
|
||||
#ifdef MAKE_ENVELOPES
|
||||
|
||||
#define ENV_LEN 128
|
||||
void MakeEnvelope(unsigned char *env, float *points_x, float *points_y)
|
||||
{//====================================================================
|
||||
int ix = -1;
|
||||
int x,y;
|
||||
|
||||
for(x=0; x<ENV_LEN; x++)
|
||||
{
|
||||
if(x > points_x[ix+4])
|
||||
ix++;
|
||||
|
||||
y = (int)polint(&points_x[ix],&points_y[ix],4,x);
|
||||
if(y < 0) y = 0;
|
||||
if(y > 255) y = 255;
|
||||
env[x] = y;
|
||||
}
|
||||
}
|
||||
|
||||
static float env1_x[]={0,0x30,0x40,ENV_LEN};
|
||||
static float env1_y[]={0,200,255,255};
|
||||
static float env2_x[]={0,0x28,0x48,0x60,ENV_LEN};
|
||||
static float env2_y[]={255,0xe0,0xc0,0x60,0};
|
||||
static float env3_x[]={0,0x18,0x30,ENV_LEN};
|
||||
static float env3_y[]={0,0x28,0x50,255};
|
||||
static float env4_x[]={0,0x20,0x40,0x60,ENV_LEN};
|
||||
static float env4_y[]={255,0x70,0,0x70,255};
|
||||
static float env5_x[]={0,0x20,0x40,0x58,0x70,ENV_LEN};
|
||||
static float env5_y[]={0,0x28,0x50,0xa0,0xf0,255};
|
||||
static float env6_x[]={0,0x20,0x38,0x60,ENV_LEN};
|
||||
static float env6_y[]={255,0xe8,0xd0,0x68,0};
|
||||
|
||||
static float env7_x[]={0,0x20,0x40,0x60,ENV_LEN}; // 214
|
||||
static float env7_y[]={85,42,0,128,255};
|
||||
static float env8_x[]={0,0x20,0x40,0x60,ENV_LEN}; // 211
|
||||
static float env8_y[]={255,130,20,10,0};
|
||||
static float env9_x[]={0,0x20,0x40,0x60,ENV_LEN}; // 51 fall
|
||||
static float env9_y[]={255,210,140,70,0};
|
||||
|
||||
static float enva3_x[]={0,44,64,84,ENV_LEN}; // amp env for broken tone
|
||||
static float enva3_y[]={255,255,160,255,255};
|
||||
static float enva6_x[]={0,44,64,80,ENV_LEN}; // amp env for drop tone
|
||||
static float enva6_y[]={255,255,255,250,50};
|
||||
|
||||
|
||||
unsigned char env_test[ENV_LEN];
|
||||
|
||||
void MakeEnvFile(char *fname, float *x, float *y, int source)
|
||||
{//==========================================================
|
||||
static char hdr[12] = {'P','I','T','C','H','E','N','V',80,0,120,0};
|
||||
FILE *f;
|
||||
int ix;
|
||||
|
||||
MakeEnvelope(env_test,x,y);
|
||||
f = fopen(fname,"wb");
|
||||
|
||||
if(source)
|
||||
{
|
||||
for(ix=0; ix<128; ix++)
|
||||
{
|
||||
fprintf(f,"0x%.2x,",env_test[ix]);
|
||||
if((ix & 7) == 7)
|
||||
fprintf(f,"\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fwrite(hdr,12,1,f);
|
||||
fwrite(env_test,128,1,f);
|
||||
}
|
||||
fclose(f);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void make_envs()
|
||||
{//=============
|
||||
MakeEnvFile("p_level",env1_x,env1_y,0);
|
||||
MakeEnvFile("p_rise",env5_x,env5_y,0);
|
||||
MakeEnvFile("p_fall",env9_x,env9_y,0);
|
||||
MakeEnvFile("p_214",env7_x,env7_y,0);
|
||||
MakeEnvFile("p_211",env8_x,env8_y,0);
|
||||
|
||||
|
||||
MakeEnvFile("vi_2",env2_x,env2_y,0);
|
||||
MakeEnvFile("vi_5",env3_x,env3_y,0);
|
||||
MakeEnvFile("p_fallrise",env4_x,env4_y,0);
|
||||
MakeEnvFile("vi_6",env6_x,env6_y,0);
|
||||
|
||||
|
||||
MakeEnvFile("vi_5amp",enva3_x,enva3_y,0);
|
||||
MakeEnvFile("vi_6amp",enva6_x,enva6_y,0);
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
int Compile::LoadEnvelope2(FILE *f, const char *fname)
|
||||
int LoadEnvelope2(FILE *f, const char *fname)
|
||||
{//===================================================
|
||||
int ix;
|
||||
int n;
|
||||
|
||||
+174
-186
@@ -64,11 +64,7 @@ static int tone_pitch_env; /* used to return pitch envelope */
|
||||
#define PITCHrise 1
|
||||
#define PITCHfrise 2 // and 3 must be for the varient preceded by 'r'
|
||||
#define PITCHfrise2 4 // and 5 must be the 'r' variant
|
||||
#define PITCHdrop 6
|
||||
#define PITCHdrop2 8
|
||||
//#define PITCHsemi_r 10
|
||||
//#define PITCH1fall 11
|
||||
//#define PITCH1fall2 12
|
||||
#define PITCHrisefall 6
|
||||
|
||||
/* 0 fall */
|
||||
unsigned char env_fall[128] = {
|
||||
@@ -132,109 +128,81 @@ static unsigned char env_r_frise2[128] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x04, 0x04, 0x05, 0x06, 0x07, 0x08,
|
||||
0x09, 0x0a, 0x0b, 0x0c, 0x0e, 0x0f, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20 };
|
||||
|
||||
static unsigned char env_risefall[128] = {
|
||||
0x98, 0x99, 0x99, 0x9a, 0x9c, 0x9d, 0x9f, 0xa1, 0xa4, 0xa7, 0xa9, 0xac, 0xb0, 0xb3, 0xb6, 0xba,
|
||||
0xbe, 0xc1, 0xc5, 0xc9, 0xcd, 0xd1, 0xd4, 0xd8, 0xdc, 0xdf, 0xe3, 0xe6, 0xea, 0xed, 0xf0, 0xf2,
|
||||
0xf5, 0xf7, 0xf9, 0xfb, 0xfc, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd,
|
||||
0xfb, 0xfa, 0xf8, 0xf6, 0xf3, 0xf1, 0xee, 0xec, 0xe9, 0xe6, 0xe4, 0xe0, 0xdd, 0xda, 0xd7, 0xd3,
|
||||
0xd0, 0xcc, 0xc8, 0xc4, 0xc0, 0xbc, 0xb8, 0xb4, 0xb0, 0xac, 0xa7, 0xa3, 0x9f, 0x9a, 0x96, 0x91,
|
||||
0x8d, 0x88, 0x84, 0x7f, 0x7b, 0x76, 0x72, 0x6d, 0x69, 0x65, 0x60, 0x5c, 0x58, 0x54, 0x50, 0x4c,
|
||||
0x48, 0x44, 0x40, 0x3c, 0x39, 0x35, 0x32, 0x2f, 0x2b, 0x28, 0x26, 0x23, 0x20, 0x1d, 0x1a, 0x17,
|
||||
0x15, 0x12, 0x0f, 0x0d, 0x0a, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
/*
|
||||
unsigned char env_drop[128] = {
|
||||
0xff, 0xf9, 0xf4, 0xee, 0xe9, 0xe4, 0xdf, 0xda, 0xd5, 0xd0, 0xcb, 0xc6, 0xc1, 0xbc, 0xb8, 0xb3,
|
||||
0xaf, 0xaa, 0xa6, 0xa2, 0x9d, 0x99, 0x95, 0x91, 0x8d, 0x89, 0x85, 0x81, 0x7d, 0x79, 0x76, 0x72,
|
||||
0x6f, 0x6b, 0x68, 0x64, 0x61, 0x5e, 0x5b, 0x58, 0x55, 0x52, 0x4f, 0x4c, 0x49, 0x46, 0x44, 0x41,
|
||||
0x3e, 0x3c, 0x39, 0x37, 0x35, 0x33, 0x30, 0x2e, 0x2c, 0x2a, 0x28, 0x27, 0x25, 0x23, 0x21, 0x20,
|
||||
0x1e, 0x1d, 0x1b, 0x1a, 0x19, 0x18, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x10, 0x0f, 0x0e,
|
||||
0x0e, 0x0d, 0x0c, 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
|
||||
0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x0c, 0x0d, 0x0e, 0x0e, 0x0f, 0x10, 0x10, 0x11, 0x12, 0x13, 0x14,
|
||||
0x15, 0x16, 0x17, 0x19, 0x1a, 0x1b, 0x1d, 0x1e, 0x20, 0x21, 0x23, 0x24, 0x26, 0x28, 0x2a, 0x2c };
|
||||
static unsigned char env_rise2[128] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x06, 0x06,
|
||||
0x07, 0x08, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
|
||||
0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1f, 0x20, 0x22, 0x23, 0x25, 0x26, 0x28, 0x29, 0x2b,
|
||||
0x2d, 0x2f, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x47, 0x49, 0x4b,
|
||||
0x4e, 0x50, 0x52, 0x55, 0x57, 0x5a, 0x5d, 0x5f, 0x62, 0x65, 0x67, 0x6a, 0x6d, 0x70, 0x73, 0x76,
|
||||
0x79, 0x7c, 0x7f, 0x82, 0x86, 0x89, 0x8c, 0x90, 0x93, 0x96, 0x9a, 0x9d, 0xa0, 0xa3, 0xa6, 0xa9,
|
||||
0xac, 0xaf, 0xb2, 0xb5, 0xb8, 0xbb, 0xbe, 0xc1, 0xc4, 0xc7, 0xca, 0xcd, 0xd0, 0xd3, 0xd6, 0xd9,
|
||||
0xdc, 0xdf, 0xe2, 0xe4, 0xe7, 0xe9, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfb, 0xfd };
|
||||
|
||||
static unsigned char env_fall2[128] = {
|
||||
0xfe, 0xfe, 0xfd, 0xfd, 0xfc, 0xfb, 0xfb, 0xfa, 0xfa, 0xf9, 0xf8, 0xf8, 0xf7, 0xf7, 0xf6, 0xf6,
|
||||
0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1, 0xf0, 0xf0, 0xef, 0xee, 0xee, 0xed, 0xec, 0xeb,
|
||||
0xea, 0xea, 0xe9, 0xe8, 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, 0xde, 0xdd, 0xdc, 0xdb,
|
||||
0xd9, 0xd8, 0xd6, 0xd5, 0xd3, 0xd2, 0xd0, 0xce, 0xcc, 0xcb, 0xc9, 0xc7, 0xc5, 0xc3, 0xc0, 0xbe,
|
||||
0xbc, 0xb9, 0xb7, 0xb5, 0xb2, 0xaf, 0xad, 0xaa, 0xa7, 0xa4, 0xa1, 0x9e, 0x9a, 0x97, 0x94, 0x90,
|
||||
0x8d, 0x89, 0x85, 0x81, 0x7d, 0x79, 0x75, 0x71, 0x6d, 0x68, 0x64, 0x61, 0x5e, 0x5b, 0x57, 0x54,
|
||||
0x51, 0x4d, 0x4a, 0x46, 0x43, 0x40, 0x3c, 0x39, 0x35, 0x32, 0x2e, 0x2a, 0x27, 0x23, 0x1f, 0x1c,
|
||||
0x18, 0x14, 0x11, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
unsigned char env_r_drop[128] = {
|
||||
0xcf, 0xce, 0xcd, 0xcc, 0xcb, 0xca, 0xc8, 0xc6, 0xc5, 0xc3, 0xc1, 0xbe, 0xbc, 0xb9, 0xb7, 0xb4,
|
||||
0xb1, 0xae, 0xab, 0xa8, 0xa5, 0xa2, 0x9e, 0x9b, 0x97, 0x94, 0x90, 0x8c, 0x89, 0x85, 0x81, 0x7d,
|
||||
0x79, 0x75, 0x71, 0x6d, 0x69, 0x65, 0x61, 0x5d, 0x59, 0x55, 0x51, 0x4e, 0x4a, 0x46, 0x42, 0x3e,
|
||||
0x3b, 0x38, 0x36, 0x34, 0x32, 0x30, 0x2e, 0x2c, 0x2b, 0x29, 0x27, 0x25, 0x24, 0x22, 0x21, 0x1f,
|
||||
0x1e, 0x1c, 0x1b, 0x1a, 0x19, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x11, 0x10, 0x0f, 0x0e,
|
||||
0x0e, 0x0d, 0x0d, 0x0c, 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
|
||||
0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x0c, 0x0d, 0x0d, 0x0e, 0x0f, 0x0f, 0x10, 0x11, 0x12, 0x13,
|
||||
0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1c, 0x1d, 0x1e, 0x20, 0x21, 0x23, 0x24, 0x26, 0x28 };
|
||||
static unsigned char env_fallrise3[128] = {
|
||||
0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf4, 0xf1, 0xee, 0xeb,
|
||||
0xe8, 0xe5, 0xe1, 0xde, 0xda, 0xd6, 0xd2, 0xcd, 0xc9, 0xc4, 0xbf, 0xba, 0xb6, 0xb0, 0xab, 0xa6,
|
||||
0xa1, 0x9c, 0x96, 0x91, 0x8b, 0x86, 0x80, 0x7b, 0x75, 0x6f, 0x6a, 0x64, 0x5f, 0x59, 0x54, 0x4f,
|
||||
0x49, 0x44, 0x3f, 0x3a, 0x35, 0x30, 0x2b, 0x26, 0x22, 0x1d, 0x19, 0x15, 0x11, 0x0d, 0x0a, 0x07,
|
||||
0x04, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x04, 0x05,
|
||||
0x07, 0x09, 0x0b, 0x0d, 0x10, 0x12, 0x15, 0x18, 0x1b, 0x1e, 0x22, 0x25, 0x29, 0x2d, 0x31, 0x35,
|
||||
0x3a, 0x3e, 0x43, 0x48, 0x4c, 0x51, 0x57, 0x5b, 0x5e, 0x62, 0x65, 0x68, 0x6b, 0x6e, 0x71, 0x74,
|
||||
0x76, 0x78, 0x7b, 0x7c, 0x7e, 0x80, 0x81, 0x82, 0x83, 0x83, 0x84, 0x84, 0x83, 0x83, 0x82, 0x81 };
|
||||
|
||||
static unsigned char env_fallrise4[128] = {
|
||||
0x72, 0x72, 0x71, 0x71, 0x70, 0x6f, 0x6d, 0x6c, 0x6a, 0x68, 0x66, 0x64, 0x61, 0x5f, 0x5c, 0x5a,
|
||||
0x57, 0x54, 0x51, 0x4e, 0x4b, 0x48, 0x45, 0x42, 0x3f, 0x3b, 0x38, 0x35, 0x32, 0x2f, 0x2c, 0x29,
|
||||
0x26, 0x23, 0x20, 0x1d, 0x1b, 0x18, 0x16, 0x14, 0x12, 0x10, 0x0e, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
|
||||
0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06,
|
||||
0x07, 0x07, 0x08, 0x09, 0x0a, 0x0c, 0x0d, 0x0f, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1b, 0x1d, 0x20,
|
||||
0x23, 0x26, 0x29, 0x2c, 0x2f, 0x33, 0x37, 0x3b, 0x3f, 0x43, 0x47, 0x4c, 0x51, 0x56, 0x5b, 0x60,
|
||||
0x65, 0x6a, 0x6f, 0x74, 0x79, 0x7f, 0x84, 0x89, 0x8f, 0x95, 0x9b, 0xa1, 0xa7, 0xad, 0xb3, 0xba,
|
||||
0xc0, 0xc7, 0xce, 0xd5, 0xdc, 0xe3, 0xea, 0xf1, 0xf5, 0xf7, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xff };
|
||||
|
||||
unsigned char env_drop2[128] = {
|
||||
0xff, 0xfc, 0xf9, 0xf6, 0xf3, 0xf0, 0xed, 0xea, 0xe7, 0xe5, 0xe2, 0xdf, 0xdc, 0xda, 0xd7, 0xd5,
|
||||
0xd2, 0xcf, 0xcd, 0xca, 0xc8, 0xc5, 0xc3, 0xc0, 0xbe, 0xbc, 0xb9, 0xb7, 0xb4, 0xb2, 0xb0, 0xae,
|
||||
0xab, 0xa9, 0xa7, 0xa5, 0xa3, 0xa1, 0x9f, 0x9d, 0x9b, 0x99, 0x97, 0x95, 0x93, 0x91, 0x8f, 0x8d,
|
||||
0x8b, 0x89, 0x88, 0x86, 0x84, 0x83, 0x81, 0x7f, 0x7e, 0x7c, 0x7a, 0x79, 0x77, 0x76, 0x74, 0x73,
|
||||
0x71, 0x70, 0x6f, 0x6d, 0x6c, 0x6a, 0x69, 0x68, 0x67, 0x65, 0x64, 0x63, 0x62, 0x61, 0x60, 0x5f,
|
||||
0x5e, 0x5d, 0x5c, 0x5b, 0x5a, 0x59, 0x58, 0x57, 0x56, 0x55, 0x54, 0x54, 0x53, 0x52, 0x51, 0x51,
|
||||
0x50, 0x4f, 0x4f, 0x4e, 0x4e, 0x4d, 0x4d, 0x4c, 0x4c, 0x4b, 0x4b, 0x4a, 0x4a, 0x4a, 0x49, 0x49,
|
||||
0x49, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x48 };
|
||||
|
||||
unsigned char env_r_drop2[128] = {
|
||||
0xcf, 0xce, 0xcd, 0xcd, 0xcc, 0xcb, 0xcb, 0xca, 0xc9, 0xc8, 0xc7, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2,
|
||||
0xc1, 0xc0, 0xbf, 0xbd, 0xbc, 0xbb, 0xba, 0xb8, 0xb7, 0xb6, 0xb4, 0xb3, 0xb2, 0xb0, 0xaf, 0xad,
|
||||
0xac, 0xaa, 0xa9, 0xa7, 0xa6, 0xa4, 0xa3, 0xa1, 0x9f, 0x9e, 0x9c, 0x9a, 0x99, 0x97, 0x96, 0x94,
|
||||
0x92, 0x91, 0x8f, 0x8d, 0x8c, 0x8a, 0x88, 0x87, 0x85, 0x83, 0x82, 0x80, 0x7e, 0x7d, 0x7b, 0x7a,
|
||||
0x78, 0x76, 0x75, 0x73, 0x72, 0x70, 0x6f, 0x6d, 0x6c, 0x6b, 0x6a, 0x69, 0x68, 0x68, 0x67, 0x66,
|
||||
0x65, 0x64, 0x63, 0x62, 0x61, 0x60, 0x5f, 0x5f, 0x5e, 0x5d, 0x5c, 0x5b, 0x5b, 0x5a, 0x59, 0x58,
|
||||
0x58, 0x57, 0x56, 0x56, 0x55, 0x54, 0x54, 0x53, 0x52, 0x52, 0x51, 0x51, 0x50, 0x4f, 0x4f, 0x4e,
|
||||
0x4e, 0x4d, 0x4d, 0x4c, 0x4c, 0x4b, 0x4b, 0x4b, 0x4a, 0x4a, 0x49, 0x49, 0x49, 0x48, 0x48, 0x48 };
|
||||
|
||||
|
||||
// 10 semi_r
|
||||
unsigned char env_semi_r[128] = {
|
||||
0x00, 0x01, 0x02, 0x04, 0x05, 0x07, 0x08, 0x09, 0x0b, 0x0c, 0x0e, 0x0f, 0x11, 0x12, 0x14, 0x15,
|
||||
0x17, 0x18, 0x1a, 0x1b, 0x1d, 0x1f, 0x20, 0x22, 0x23, 0x25, 0x27, 0x28, 0x2a, 0x2c, 0x2d, 0x2f,
|
||||
0x31, 0x33, 0x35, 0x37, 0x39, 0x3b, 0x3d, 0x3f, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50,
|
||||
0x52, 0x54, 0x57, 0x59, 0x5b, 0x5d, 0x5f, 0x61, 0x63, 0x65, 0x67, 0x69, 0x6c, 0x6e, 0x70, 0x72,
|
||||
0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, 0x80, 0x82, 0x84, 0x86, 0x87, 0x89, 0x8b, 0x8d, 0x8f, 0x90,
|
||||
0x92, 0x94, 0x96, 0x97, 0x99, 0x9b, 0x9c, 0x9e, 0x9f, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
|
||||
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xad, 0xae, 0xaf, 0xb0, 0xb0, 0xb1, 0xb2, 0xb2, 0xb3, 0xb3,
|
||||
0xb4, 0xb4, 0xb4, 0xb5, 0xb5, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8 };
|
||||
|
||||
|
||||
// 11 drop3
|
||||
unsigned char env_drop3[128] = {
|
||||
0xff, 0xf8, 0xf2, 0xec, 0xe7, 0xe1, 0xdb, 0xd5, 0xd0, 0xca, 0xc5, 0xc0, 0xbb, 0xb5, 0xb1, 0xac,
|
||||
0xa7, 0xa3, 0x9e, 0x9b, 0x97, 0x93, 0x90, 0x8c, 0x89, 0x86, 0x83, 0x80, 0x7d, 0x7b, 0x78, 0x76,
|
||||
0x73, 0x71, 0x6f, 0x6d, 0x6b, 0x68, 0x66, 0x64, 0x62, 0x5f, 0x5d, 0x5b, 0x59, 0x57, 0x56, 0x54,
|
||||
0x52, 0x50, 0x4e, 0x4d, 0x4b, 0x49, 0x48, 0x46, 0x44, 0x43, 0x41, 0x40, 0x3e, 0x3d, 0x3b, 0x3a,
|
||||
0x39, 0x37, 0x35, 0x34, 0x32, 0x31, 0x2f, 0x2d, 0x2c, 0x2a, 0x29, 0x28, 0x26, 0x25, 0x23, 0x22,
|
||||
0x21, 0x1f, 0x1e, 0x1d, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f,
|
||||
0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x06, 0x06, 0x05, 0x05, 0x04,
|
||||
0x04, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
// 12 r_drop3
|
||||
unsigned char env_r_drop3[128] = {
|
||||
0xcf, 0xce, 0xcd, 0xcc, 0xcb, 0xca, 0xc8, 0xc7, 0xc5, 0xc4, 0xc2, 0xc0, 0xbe, 0xbc, 0xba, 0xb8,
|
||||
0xb5, 0xb3, 0xb1, 0xae, 0xac, 0xa9, 0xa6, 0xa4, 0xa1, 0x9e, 0x9b, 0x98, 0x95, 0x92, 0x8f, 0x8c,
|
||||
0x89, 0x86, 0x83, 0x80, 0x7d, 0x7a, 0x76, 0x73, 0x70, 0x6d, 0x6a, 0x67, 0x63, 0x60, 0x5d, 0x5a,
|
||||
0x57, 0x54, 0x51, 0x4e, 0x4b, 0x48, 0x45, 0x43, 0x40, 0x3d, 0x3b, 0x39, 0x37, 0x36, 0x34, 0x33,
|
||||
0x32, 0x30, 0x2f, 0x2d, 0x2c, 0x2b, 0x2a, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20,
|
||||
0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11,
|
||||
0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0d, 0x0c, 0x0b, 0x0b, 0x0a, 0x09, 0x09, 0x08, 0x08, 0x07, 0x06,
|
||||
0x06, 0x05, 0x05, 0x04, 0x04, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00 };
|
||||
*/
|
||||
|
||||
// long vowel fall
|
||||
static unsigned char env_long_fall[128] = {
|
||||
254,249,250,251,252,253,254,254, 255,255,255,255,254,254,253,252,
|
||||
251,250,249,247,244,242,238,234, 230,225,221,217,213,209,206,203,
|
||||
199,195,191,187,183,179,175,172, 168,165,162,159,156,153,150,148,
|
||||
145,143,140,138,136,134,132,130, 128,126,123,120,117,114,111,107,
|
||||
104,100,96,91, 86,82,77,73, 70,66,63,60, 58,55,53,51,
|
||||
49,47,46,45, 43,42,40,38, 36,34,31,28, 26,24,22,20,
|
||||
18,16,14,12, 11,10,9,8, 8,8,8,8, 9,8,8,8,
|
||||
8,8,7,7, 6,6,6,5, 4,4,3,3, 2,1,1,0 };
|
||||
|
||||
|
||||
static unsigned char env_risefallrise[128] = {
|
||||
0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x83, 0x84, 0x87, 0x89, 0x8c, 0x8f, 0x92, 0x96, 0x99, 0x9d, 0xa1,
|
||||
0xa5, 0xaa, 0xae, 0xb2, 0xb7, 0xbb, 0xc0, 0xc5, 0xc9, 0xcd, 0xd2, 0xd6, 0xda, 0xde, 0xe2, 0xe6,
|
||||
0xea, 0xed, 0xf0, 0xf3, 0xf5, 0xf8, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xfe, 0xfd, 0xfc, 0xfb, 0xf9,
|
||||
0xf7, 0xf4, 0xf0, 0xec, 0xe7, 0xe2, 0xdc, 0xd5, 0xce, 0xc6, 0xbd, 0xb4, 0xa9, 0x9e, 0x92, 0x88,
|
||||
0x82, 0x7d, 0x77, 0x72, 0x6c, 0x66, 0x60, 0x5a, 0x54, 0x4e, 0x49, 0x42, 0x3c, 0x37, 0x32, 0x2d,
|
||||
0x28, 0x24, 0x1f, 0x1b, 0x18, 0x14, 0x11, 0x0e, 0x0c, 0x09, 0x07, 0x06, 0x05, 0x04, 0x04, 0x04,
|
||||
0x04, 0x05, 0x06, 0x08, 0x0a, 0x0d, 0x10, 0x14, 0x18, 0x1d, 0x23, 0x29, 0x2f, 0x37, 0x3e, 0x47,
|
||||
0x50, 0x5a, 0x64, 0x70, 0x7c, 0x83, 0x85, 0x88, 0x8a, 0x8c, 0x8e, 0x8f, 0x91, 0x92, 0x93, 0x93 };
|
||||
|
||||
|
||||
|
||||
|
||||
unsigned char *envelope_data[16] = {
|
||||
env_fall, env_rise, env_frise, env_r_frise,
|
||||
unsigned char *envelope_data[18] = {
|
||||
env_fall,
|
||||
env_rise,
|
||||
env_frise, env_r_frise,
|
||||
env_frise2, env_r_frise2,
|
||||
env_risefall, env_risefall,
|
||||
|
||||
env_long_fall, env_long_fall, env_fall, env_fall,
|
||||
env_fall, env_fall, env_fall, env_fall,
|
||||
env_fall, env_fall
|
||||
env_fallrise3, env_fallrise3,
|
||||
env_fallrise4, env_fallrise4,
|
||||
env_fall2, env_fall2,
|
||||
env_rise2, env_rise2,
|
||||
env_risefallrise, env_risefallrise
|
||||
};
|
||||
|
||||
|
||||
@@ -251,15 +219,12 @@ 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};
|
||||
|
||||
|
||||
#define N_TONE_HEAD_TABLE 13
|
||||
#define N_TONE_NUCLEUS_TABLE 13
|
||||
|
||||
|
||||
typedef struct {
|
||||
unsigned char pitch_env0; /* pitch envelope, tonic syllable at end */
|
||||
unsigned char tonic_max0;
|
||||
unsigned char tonic_min0;
|
||||
|
||||
unsigned char pitch_env1; /* followed by unstressed */
|
||||
unsigned char tonic_max1;
|
||||
unsigned char tonic_min1;
|
||||
|
||||
unsigned char pre_start;
|
||||
unsigned char pre_end;
|
||||
|
||||
@@ -272,56 +237,59 @@ typedef struct {
|
||||
|
||||
char n_overflow;
|
||||
short *overflow;
|
||||
} TONE_HEAD;
|
||||
|
||||
|
||||
typedef struct {
|
||||
unsigned char pitch_env0; /* pitch envelope, tonic syllable at end */
|
||||
unsigned char tonic_max0;
|
||||
unsigned char tonic_min0;
|
||||
|
||||
unsigned char pitch_env1; /* followed by unstressed */
|
||||
unsigned char tonic_max1;
|
||||
unsigned char tonic_min1;
|
||||
|
||||
short *backwards;
|
||||
|
||||
unsigned char tail_start;
|
||||
unsigned char tail_end;
|
||||
unsigned char tail_shape;
|
||||
} TONE_TABLE;
|
||||
unsigned char flags;
|
||||
} TONE_NUCLEUS;
|
||||
|
||||
#define N_TONE_TABLE 13
|
||||
#define T_EMPH 1
|
||||
|
||||
static TONE_TABLE tone_table[N_TONE_TABLE] = {
|
||||
{PITCHfall, 30, 5, PITCHfall, 30, 8, // 0 statement
|
||||
20, 25, 34, 22, drops_0, 3, 3, 5, oflow, NULL, 12, 7, 0},
|
||||
|
||||
{PITCHfrise, 35,8, PITCHfrise2, 35,10, // 1 comma
|
||||
20, 25, 34, 20, drops_0, 3, 3, 5, oflow, NULL, 15, 23, 0},
|
||||
|
||||
{PITCHfrise, 39,10, PITCHfrise2, 36,10, // 2 question
|
||||
20, 25, 34, 20, drops_0, 3, 3, 5, oflow, NULL, 15, 28, 0},
|
||||
|
||||
{PITCHfall, 41, 4, PITCHfall, 41, 27, // 3 exclamation
|
||||
20, 25, 36, 22, drops_0, 3, 4, 5, oflow_emf, back_emf, 16, 4, 0},
|
||||
|
||||
{PITCHfall, 38, 2, PITCHfall, 42, 30, // 4 statement, emphatic
|
||||
20, 25, 34, 22, drops_0, 3, 3, 5, oflow, NULL, 15, 5, 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, 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, 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, 20, 26, 0},
|
||||
|
||||
{PITCHfrise, 35,11, PITCHfrise2, 32,10, // 9 comma
|
||||
20, 25, 34, 20, drops_0, 3, 3, 5, oflow, NULL, 19, 24, 0},
|
||||
|
||||
{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},
|
||||
static TONE_HEAD tone_head_table[N_TONE_HEAD_TABLE] = {
|
||||
{20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 0 statement
|
||||
{20, 25, 34, 20, drops_0, 3, 3, 5, oflow}, // 1 comma
|
||||
{20, 25, 34, 20, drops_0, 3, 3, 5, oflow}, // 2 question
|
||||
{20, 25, 36, 22, drops_0, 3, 4, 5, oflow_emf}, // 3 exclamation
|
||||
{20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 4 statement, emphatic
|
||||
{20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less}, // 5 statement, less intonation
|
||||
{20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less}, // 6 comma, less intonation
|
||||
{20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less}, // 7 comma, less intonation, less rise
|
||||
{20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 8 pitch raises at end of sentence
|
||||
{20, 25, 34, 20, drops_0, 3, 3, 5, oflow}, // 9 comma
|
||||
{20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 10 question
|
||||
{20, 25, 24, 22, drops_0, 3, 3, 5, oflow_less}, // 11 test
|
||||
{19, 26, 36, 20, drops_0, 2, 4, 5, oflow_test2}, // 12 test
|
||||
};
|
||||
|
||||
static TONE_NUCLEUS tone_nucleus_table[N_TONE_NUCLEUS_TABLE] = {
|
||||
{PITCHfall, 30, 5, PITCHfall, 30, 8, NULL, 12, 7, 0}, // 0 statement
|
||||
{PITCHfrise, 35, 8, PITCHfrise2, 35,10, NULL, 15, 23, 0}, // 1 comma
|
||||
{PITCHfrise, 39,10, PITCHfrise2, 36,10, NULL, 15, 28, 0}, // 2 question
|
||||
// {PITCHfall, 41, 4, PITCHfall, 41,27, NULL, 16, 4, T_EMPH}, // 3 exclamation
|
||||
{PITCHfall, 43, 3, PITCHfall, 45,35, NULL, 35, 4, T_EMPH}, // 3 exclamation
|
||||
// {PITCHrisefall,47, 8, PITCHrise, 48,30, NULL, 48, 5, T_EMPH}, // 3 exclamation
|
||||
{PITCHfall, 38, 2, PITCHfall, 42,30, NULL, 15, 5, 0}, // 4 statement, emphatic
|
||||
{PITCHfall, 28, 5, PITCHfall, 28, 9, NULL, 12, 7, 0}, // 5 statement, less intonation
|
||||
{PITCHfrise, 30, 8, PITCHfrise2, 30,10, NULL, 13, 20, 0}, // 6 comma, less intonation
|
||||
{PITCHfrise2, 28, 7, PITCHfall, 29,14, NULL, 14, 8, 0}, // 7 comma, less intonation, less rise
|
||||
{PITCHrise, 30,20, PITCHfall, 19,14, NULL, 20, 26, 0}, // 8 pitch raises at end of sentence
|
||||
{PITCHfrise, 35,11, PITCHfrise2, 32,10, NULL, 19, 24, 0}, // 9 comma
|
||||
{PITCHfrise, 39,15, PITCHfall, 28,14, NULL, 20, 36, 0}, // 10 question
|
||||
{PITCHfall, 28, 6, PITCHfall, 28,10, NULL, 12, 6, 0}, // 11 test
|
||||
{PITCHfall, 35, 9, PITCHfall, 35,12, NULL, 16, 10, 0}, // 12 test
|
||||
};
|
||||
|
||||
|
||||
@@ -330,8 +298,8 @@ static TONE_TABLE tone_table[N_TONE_TABLE] = {
|
||||
unsigned char punctuation_to_tone[INTONATION_TYPES][PUNCT_INTONATIONS] = {
|
||||
{0,1,2,3,0,4},
|
||||
{0,1,2,3,0,4},
|
||||
{5,6,2,0,0,4},
|
||||
{5,7,1,0,0,4},
|
||||
{5,6,2,3,0,4},
|
||||
{5,7,1,3,0,4},
|
||||
{8,9,10,3,0,0},
|
||||
{8,8,10,3,0,0},
|
||||
{11,11,11,11,0,0}, // 6 test
|
||||
@@ -485,7 +453,7 @@ static void set_pitch(SYLLABLE *syl, int base, int drop)
|
||||
|
||||
|
||||
|
||||
static int calc_pitch_segment(int ix, int end_ix, TONE_TABLE *t, int min_stress, int continuing)
|
||||
static int calc_pitch_segment(int ix, int end_ix, TONE_HEAD *th, TONE_NUCLEUS *tn, int min_stress, int continuing)
|
||||
/**********************************************************************************************/
|
||||
/* Calculate pitches until next RESET or tonic syllable, or end.
|
||||
Increment pitch if stress is >= min_stress.
|
||||
@@ -505,7 +473,7 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_TABLE *t, int min_stress,
|
||||
|
||||
static short continue_tab[5] = {-13, 16, 10, 4, 0};
|
||||
|
||||
drops = t->body_drops;
|
||||
drops = th->body_drops;
|
||||
|
||||
if(continuing)
|
||||
{
|
||||
@@ -513,13 +481,13 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_TABLE *t, int min_stress,
|
||||
overflow = 0;
|
||||
n_overflow = 5;
|
||||
overflow_tab = continue_tab;
|
||||
increment = (t->body_end - t->body_start) << 8;
|
||||
increment = increment / (t->body_max_steps -1);
|
||||
increment = (th->body_end - th->body_start) << 8;
|
||||
increment = increment / (th->body_max_steps -1);
|
||||
}
|
||||
else
|
||||
{
|
||||
n_overflow = t->n_overflow;
|
||||
overflow_tab = t->overflow;
|
||||
n_overflow = th->n_overflow;
|
||||
overflow_tab = th->overflow;
|
||||
initial = 1;
|
||||
}
|
||||
|
||||
@@ -541,18 +509,18 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_TABLE *t, int min_stress,
|
||||
overflow = 0;
|
||||
n_steps = n_primary = count_increments(ix,end_ix,min_stress);
|
||||
|
||||
if(n_steps > t->body_max_steps)
|
||||
n_steps = t->body_max_steps;
|
||||
if(n_steps > th->body_max_steps)
|
||||
n_steps = th->body_max_steps;
|
||||
|
||||
if(n_steps > 1)
|
||||
{
|
||||
increment = (t->body_end - t->body_start) << 8;
|
||||
increment = (th->body_end - th->body_start) << 8;
|
||||
increment = increment / (n_steps -1);
|
||||
}
|
||||
else
|
||||
increment = 0;
|
||||
|
||||
pitch = t->body_start << 8;
|
||||
pitch = th->body_start << 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -560,11 +528,11 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_TABLE *t, int min_stress,
|
||||
pitch += increment;
|
||||
else
|
||||
{
|
||||
pitch = (t->body_end << 8) - (increment * overflow_tab[overflow++])/16;
|
||||
pitch = (th->body_end << 8) - (increment * overflow_tab[overflow++])/16;
|
||||
if(overflow >= n_overflow)
|
||||
{
|
||||
overflow = 0;
|
||||
overflow_tab = t->overflow;
|
||||
overflow_tab = th->overflow;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -572,9 +540,9 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_TABLE *t, int min_stress,
|
||||
n_steps--;
|
||||
|
||||
n_primary--;
|
||||
if((t->backwards) && (n_primary < 2))
|
||||
if((tn->backwards) && (n_primary < 2))
|
||||
{
|
||||
pitch = t->backwards[n_primary] << 8;
|
||||
pitch = tn->backwards[n_primary] << 8;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -592,7 +560,7 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_TABLE *t, int min_stress,
|
||||
{
|
||||
/* unstressed, drop pitch if preceded by PRIMARY */
|
||||
if((syllable_tab[ix-1].stress & 0x3f) >= SECONDARY)
|
||||
set_pitch(syl,pitch - (t->body_lower_u << 8), drops[stress]);
|
||||
set_pitch(syl,pitch - (th->body_lower_u << 8), drops[stress]);
|
||||
else
|
||||
set_pitch(syl,pitch,drops[stress]);
|
||||
}
|
||||
@@ -646,9 +614,12 @@ static int calc_pitch_segment2(int ix, int end_ix, int start_p, int end_p, int m
|
||||
drop = -increment;
|
||||
if(drop < min_drop[stress])
|
||||
drop = min_drop[stress];
|
||||
|
||||
|
||||
pitch += increment;
|
||||
set_pitch(syl,pitch,drop);
|
||||
|
||||
if(drop > 0x900)
|
||||
drop = 0x900;
|
||||
set_pitch(syl, pitch, drop);
|
||||
}
|
||||
|
||||
ix++;
|
||||
@@ -661,19 +632,21 @@ static int calc_pitch_segment2(int ix, int end_ix, int start_p, int end_p, int m
|
||||
|
||||
|
||||
|
||||
static int calc_pitches(int start, int end, int group_tone)
|
||||
/**********************************************************/
|
||||
/* Calculate pitch values for the vowels in this tone group */
|
||||
static int calc_pitches(int start, int end, int head_tone, int nucleus_tone)
|
||||
//===========================================================================
|
||||
// Calculate pitch values for the vowels in this tone group
|
||||
{
|
||||
int ix;
|
||||
TONE_TABLE *t;
|
||||
TONE_HEAD *th;
|
||||
TONE_NUCLEUS *tn;
|
||||
int drop;
|
||||
int continuing = 0;
|
||||
|
||||
if(start > 0)
|
||||
continuing = 1;
|
||||
|
||||
t = &tone_table[group_tone];
|
||||
th = &tone_head_table[head_tone];
|
||||
tn = &tone_nucleus_table[nucleus_tone];
|
||||
ix = start;
|
||||
|
||||
/* vowels before the first primary stress */
|
||||
@@ -681,7 +654,7 @@ static int calc_pitches(int start, int end, int group_tone)
|
||||
|
||||
if(number_pre > 0)
|
||||
{
|
||||
ix = calc_pitch_segment2(ix, ix+number_pre, t->pre_start, t->pre_end, 0);
|
||||
ix = calc_pitch_segment2(ix, ix+number_pre, th->pre_start, th->pre_end, 0);
|
||||
}
|
||||
|
||||
/* body of tonic segment */
|
||||
@@ -691,7 +664,7 @@ static int calc_pitches(int start, int end, int group_tone)
|
||||
{
|
||||
tone_posn = tone_posn2; // put tone on the penultimate stressed word
|
||||
}
|
||||
ix = calc_pitch_segment(ix,tone_posn, t, PRIMARY, continuing);
|
||||
ix = calc_pitch_segment(ix,tone_posn, th, tn, PRIMARY, continuing);
|
||||
|
||||
if(no_tonic)
|
||||
return(0);
|
||||
@@ -699,17 +672,22 @@ static int calc_pitches(int start, int end, int group_tone)
|
||||
/* tonic syllable */
|
||||
/******************/
|
||||
|
||||
if(tn->flags & T_EMPH)
|
||||
{
|
||||
syllable_tab[ix].flags |= SYL_EMPHASIS;
|
||||
}
|
||||
|
||||
if(number_tail == 0)
|
||||
{
|
||||
tone_pitch_env = t->pitch_env0;
|
||||
drop = t->tonic_max0 - t->tonic_min0;
|
||||
set_pitch(&syllable_tab[ix++],t->tonic_min0 << 8,drop << 8);
|
||||
tone_pitch_env = tn->pitch_env0;
|
||||
drop = tn->tonic_max0 - tn->tonic_min0;
|
||||
set_pitch(&syllable_tab[ix++],tn->tonic_min0 << 8,drop << 8);
|
||||
}
|
||||
else
|
||||
{
|
||||
tone_pitch_env = t->pitch_env1;
|
||||
drop = t->tonic_max1 - t->tonic_min1;
|
||||
set_pitch(&syllable_tab[ix++],t->tonic_min1 << 8,drop << 8);
|
||||
tone_pitch_env = tn->pitch_env1;
|
||||
drop = tn->tonic_max1 - tn->tonic_min1;
|
||||
set_pitch(&syllable_tab[ix++],tn->tonic_min1 << 8,drop << 8);
|
||||
}
|
||||
|
||||
syllable_tab[tone_posn].env = tone_pitch_env;
|
||||
@@ -719,7 +697,7 @@ static int calc_pitches(int start, int end, int group_tone)
|
||||
/* tail, after the tonic syllable */
|
||||
/**********************************/
|
||||
|
||||
calc_pitch_segment2(ix, end, t->tail_start, t->tail_end, 0);
|
||||
calc_pitch_segment2(ix, end, tn->tail_start, tn->tail_end, 0);
|
||||
|
||||
return(tone_pitch_env);
|
||||
} /* end of calc_pitches */
|
||||
@@ -770,6 +748,8 @@ void Translator::CalcPitches_Tone(int clause_tone)
|
||||
}
|
||||
}
|
||||
|
||||
phoneme_list[final_stressed].tone = 7;
|
||||
|
||||
// language specific, changes to tones
|
||||
if(translator_name == L('v','i'))
|
||||
{
|
||||
@@ -828,6 +808,15 @@ void Translator::CalcPitches_Tone(int clause_tone)
|
||||
tone_promoted = 0;
|
||||
}
|
||||
|
||||
if(ix == final_stressed)
|
||||
{
|
||||
if((tph->mnemonic == 0x3535 ) || (tph->mnemonic == 0x3135))
|
||||
{
|
||||
// change sentence final tone 1 or 4 to stress 6, not 7
|
||||
phoneme_list[final_stressed].tone = 6;
|
||||
}
|
||||
}
|
||||
|
||||
if(prev_tph->mnemonic == 0x343132) // [214]
|
||||
{
|
||||
if(tph->mnemonic == 0x343132) // [214]
|
||||
@@ -895,7 +884,6 @@ void Translator::CalcPitches_Tone(int clause_tone)
|
||||
}
|
||||
}
|
||||
|
||||
phoneme_list[final_stressed].tone = 7;
|
||||
|
||||
} // end of Translator::CalcPitches_Tone
|
||||
|
||||
@@ -1034,9 +1022,9 @@ void Translator::CalcPitches(int clause_type)
|
||||
|
||||
count_pitch_vowels(st_start, ix, n_st);
|
||||
if((ix < n_st) || (clause_type == 0))
|
||||
calc_pitches(st_start, ix, group_tone_emph); // split into > 1 tone groups, use emphatic tone
|
||||
calc_pitches(st_start, ix, group_tone_emph, group_tone_emph); // split into > 1 tone groups, use emphatic tone
|
||||
else
|
||||
calc_pitches(st_start, ix, group_tone);
|
||||
calc_pitches(st_start, ix, group_tone, group_tone);
|
||||
|
||||
st_start = ix;
|
||||
}
|
||||
@@ -1045,7 +1033,7 @@ void Translator::CalcPitches(int clause_type)
|
||||
// end of clause after this syllable, indicated by a phonPAUSE_CLAUSE phoneme
|
||||
st_clause_end = st_ix+1;
|
||||
count_pitch_vowels(st_start, st_clause_end, st_clause_end);
|
||||
calc_pitches(st_start, st_clause_end, group_tone_comma);
|
||||
calc_pitches(st_start, st_clause_end, group_tone_comma, group_tone_comma);
|
||||
st_start = st_clause_end;
|
||||
}
|
||||
}
|
||||
@@ -1053,7 +1041,7 @@ void Translator::CalcPitches(int clause_type)
|
||||
if(st_start < st_ix)
|
||||
{
|
||||
count_pitch_vowels(st_start, st_ix, n_st);
|
||||
calc_pitches(st_start, st_ix, group_tone);
|
||||
calc_pitches(st_start, st_ix, group_tone, group_tone);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@ wxMenuBar *MakeMenu(int type)
|
||||
file_menu->Append(SPECTSEQ_SAVE, _("&Save"));
|
||||
file_menu->Append(SPECTSEQ_SAVEAS, _("Save &As"));
|
||||
file_menu->Append(SPECTSEQ_SAVESELECT, _("Save Selection"));
|
||||
// file_menu->Append(SPECTSEQ_SAVEPITCH, _T("Save Pitch &Envelope"));
|
||||
file_menu->Append(SPECTSEQ_SAVEPITCH, _T("Save Pitch &Envelope"));
|
||||
file_menu->Append(SPECTSEQ_CLOSE, _("&Close"));
|
||||
// file_menu->Append(MENU_CLOSE_ALL, _T("Close &All"));
|
||||
}
|
||||
|
||||
+10
-3
@@ -79,8 +79,15 @@ void InitProsodyDisplay()
|
||||
menu_envelopes->Append(0x101,_T("Rise"));
|
||||
menu_envelopes->Append(0x102,_T("Fall-rise"));
|
||||
menu_envelopes->Append(0x103,_T("Fall-rise (R)"));
|
||||
menu_envelopes->Append(0x104,_T("Fall-2"));
|
||||
menu_envelopes->Append(0x106,_T("Fall-3"));
|
||||
menu_envelopes->Append(0x104,_T("Fall-rise 2"));
|
||||
menu_envelopes->Append(0x105,_T("Fall-rise 2(R)"));
|
||||
menu_envelopes->Append(0x106,_T("Rise-fall"));
|
||||
|
||||
menu_envelopes->Append(0x108,_T("Fall-rise 3"));
|
||||
menu_envelopes->Append(0x10a,_T("Fall-rise 4"));
|
||||
menu_envelopes->Append(0x10c,_T("Fall 2"));
|
||||
menu_envelopes->Append(0x10e,_T("Rise 2"));
|
||||
menu_envelopes->Append(0x110,_T("Rise-fall-rise"));
|
||||
|
||||
menu_prosody = new wxMenu;
|
||||
menu_prosody->Append(1,_T("Pitch envelope"),menu_envelopes);
|
||||
@@ -353,7 +360,7 @@ void ProsodyDisplay::DrawEnv(wxDC& dc, int x1, int y1, int width, PHONEME_LIST *
|
||||
for(ix=0; ix<=width; ix+=4)
|
||||
{
|
||||
x = int((ix * 127.9)/width);
|
||||
pitch = ph->pitch1 + (pitchr * env[x])/256;
|
||||
pitch = p1 + (pitchr * env[x])/256;
|
||||
y = y1-int(pitch * scaley);
|
||||
if(ix > 0)
|
||||
dc.DrawLine(x1+ix-4,y2,x1+ix,y);
|
||||
|
||||
+2
-2
@@ -1272,8 +1272,8 @@ static void SetProsodyParameter(int param_type, wchar_t *attr1, PARAM_STACK *sp)
|
||||
{"x-low",20},
|
||||
{"low",50},
|
||||
{"medium",100},
|
||||
{"high",125},
|
||||
{"x-high",150},
|
||||
{"high",140},
|
||||
{"x-high",180},
|
||||
{NULL, -1}};
|
||||
|
||||
static const MNEM_TAB *mnem_tabs[5] = {
|
||||
|
||||
@@ -518,6 +518,8 @@ void Translator::CalcLengths()
|
||||
{
|
||||
// tonic syllable, include a constant component so it doesn't decrease directly with speed
|
||||
length_mod += 20;
|
||||
if(emphasized)
|
||||
length_mod += 10;
|
||||
}
|
||||
else
|
||||
if(emphasized)
|
||||
@@ -564,6 +566,7 @@ if(p->type != phVOWEL)
|
||||
// set pitch for pre-vocalic part
|
||||
if(pitch_start - last_pitch > 8) // was 9
|
||||
last_pitch = pitch_start - 8;
|
||||
|
||||
prev->pitch1 = last_pitch;
|
||||
prev->pitch2 = pitch_start;
|
||||
if(last_pitch < pitch_start)
|
||||
|
||||
+1
-1
@@ -156,7 +156,7 @@ public:
|
||||
int Save(wxOutputStream& stream, int selection);
|
||||
int Load(wxInputStream& stream);
|
||||
void Draw(wxDC &dc, int start_y, int end_y);
|
||||
void MakePitchenv(PitchEnvelope &pitch);
|
||||
void MakePitchenv(PitchEnvelope &pitch, int start_frame, int end_frame);
|
||||
void MakeWave(int start, int end, PitchEnvelope &pitch);
|
||||
|
||||
void InterpolatePeaks(int on);
|
||||
|
||||
+14
-12
@@ -405,31 +405,33 @@ void SpectDisplay::Save(const wxString &path, int selection)
|
||||
|
||||
|
||||
void SpectDisplay::SavePitchenv(PitchEnvelope &pitch)
|
||||
{//==============================================
|
||||
{//==================================================
|
||||
// save the pitch envelope
|
||||
|
||||
int ix;
|
||||
FILE *f_env;
|
||||
wxString filename;
|
||||
char fname[200];
|
||||
|
||||
filename = wxFileSelector(_T("(Save pitch envelope"),path_pitches,_T(""),_T(""),_T("*"),wxSAVE);
|
||||
if(filename.IsEmpty())
|
||||
return;
|
||||
|
||||
wxFileOutputStream stream(filename);
|
||||
if(stream.Ok() == FALSE)
|
||||
strcpy(fname, filename.mb_str(wxConvLocal));
|
||||
f_env = fopen(fname,"w");
|
||||
if(f_env == NULL)
|
||||
{
|
||||
wxLogError(_T("Failed to write '%s'"),filename.c_str());
|
||||
wxLogError(_T("Failed to write ")+filename);
|
||||
return;
|
||||
}
|
||||
|
||||
wxDataOutputStream s(stream);
|
||||
|
||||
s.Write32(FILEID1_PITCHENV);
|
||||
s.Write32(FILEID2_PITCHENV);
|
||||
s.Write16(pitch.pitch1); // Hz
|
||||
s.Write16(pitch.pitch2); // Hz
|
||||
for(ix=0; ix<128; ix++)
|
||||
s.Write8(pitch.env[ix]);
|
||||
{
|
||||
fprintf(f_env," 0x%.2x,",pitch.env[ix]);
|
||||
if((ix & 0xf) == 0xf)
|
||||
fprintf(f_env,"\n");
|
||||
}
|
||||
fclose(f_env);
|
||||
} // end of SpectDisplay::SavePitchenv
|
||||
|
||||
|
||||
@@ -958,7 +960,7 @@ void MyFrame::OnNewWindow(wxCommandEvent& event)
|
||||
setlocale(LC_NUMERIC,"C"); // read numbers in the form 1.23456
|
||||
spectseq->Load(stream);
|
||||
spectseq->name = leaf;
|
||||
spectseq->MakePitchenv(spectseq->pitchenv);
|
||||
spectseq->MakePitchenv(spectseq->pitchenv,0,spectseq->numframes-1);
|
||||
|
||||
if(event.GetId() == MENU_SPECTRUM)
|
||||
path_spectload = path.GetPath();
|
||||
|
||||
+4
-4
@@ -791,8 +791,8 @@ void SpectSeq::CopyDown(int frame, int direction)
|
||||
} // end of CopyDown
|
||||
|
||||
|
||||
void SpectSeq::MakePitchenv(PitchEnvelope &pitchenv)
|
||||
{//=================================================
|
||||
void SpectSeq::MakePitchenv(PitchEnvelope &pitchenv, int start_frame, int end_frame)
|
||||
{//=================================================================================
|
||||
double f;
|
||||
double min=8000;
|
||||
double max=0;
|
||||
@@ -808,7 +808,7 @@ void SpectSeq::MakePitchenv(PitchEnvelope &pitchenv)
|
||||
|
||||
memset(pitchenv.env,127,128);
|
||||
|
||||
for(ix=0; ix<numframes; ix++)
|
||||
for(ix=start_frame; ix<=end_frame; ix++)
|
||||
{
|
||||
if((f = frames[ix]->pitch) == 0) continue;
|
||||
nx++;
|
||||
@@ -837,7 +837,7 @@ void SpectSeq::MakePitchenv(PitchEnvelope &pitchenv)
|
||||
ay = new float[nx+1];
|
||||
|
||||
nx = 0;
|
||||
for(ix=0; ix<numframes; ix++)
|
||||
for(ix=start_frame; ix<=end_frame; ix++)
|
||||
{
|
||||
if((f = frames[ix]->pitch) == 0) continue;
|
||||
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@
|
||||
#include "translate.h"
|
||||
#include "wave.h"
|
||||
|
||||
const char *version_string = "1.31.06 05.Feb.08";
|
||||
const char *version_string = "1.31.07 08.Feb.08";
|
||||
const int version_phdata = 0x013105;
|
||||
|
||||
int option_device_number = -1;
|
||||
|
||||
+1
-1
@@ -241,7 +241,7 @@ void SelectPhonemeTable(int number);
|
||||
int SelectPhonemeTableName(const char *name);
|
||||
|
||||
|
||||
extern unsigned char *envelope_data[16];
|
||||
extern unsigned char *envelope_data[18];
|
||||
extern int formant_rate[]; // max rate of change of each formant
|
||||
extern int speed_factor1;
|
||||
extern int speed_factor2;
|
||||
|
||||
@@ -718,7 +718,7 @@ SetLengthMods(tr,3); // all equal
|
||||
case L('z','h'):
|
||||
case L_zhy:
|
||||
{
|
||||
static const short stress_lengths_zh[8] = {230,150, 230,230, 230,0, 230,300};
|
||||
static const short stress_lengths_zh[8] = {230,150, 230,230, 230,0, 240,290};
|
||||
static const unsigned char stress_amps_zh[] = {22,16, 22,22, 22,22, 22,22 };
|
||||
|
||||
tr = new Translator;
|
||||
|
||||
+18
-2
@@ -521,8 +521,9 @@ void DrawEnvelopes()
|
||||
int ix_env;
|
||||
int y_base;
|
||||
int x;
|
||||
FILE *f_txt=NULL;
|
||||
unsigned char *env;
|
||||
char name[80];
|
||||
char name[200];
|
||||
|
||||
wxBitmap bitmap(WD_ENV,HT_ENV*n_envelopes);
|
||||
|
||||
@@ -533,6 +534,8 @@ void DrawEnvelopes()
|
||||
dc.SetFont(*wxSWISS_FONT);
|
||||
dc.Clear();
|
||||
|
||||
sprintf(name,"%s%s",path_source,"envelopes.txt");
|
||||
// f_txt = fopen(name,"w");
|
||||
|
||||
for(ix_env=0; ix_env<n_envelopes; ix_env++)
|
||||
{
|
||||
@@ -553,9 +556,22 @@ void DrawEnvelopes()
|
||||
{
|
||||
dc.DrawLine(x*2, y_base-env[x]/2, (x+1)*2, y_base-env[x+1]/2);
|
||||
}
|
||||
|
||||
if(f_txt != NULL)
|
||||
{
|
||||
fprintf(f_txt,"%s\n",name);
|
||||
for(x=0; x<128; x++)
|
||||
{
|
||||
fprintf(f_txt," 0x%.2x,",env[x]);
|
||||
if((x & 0xf) == 0xf)
|
||||
fputc('\n',f_txt);
|
||||
}
|
||||
fputc('\n',f_txt);
|
||||
}
|
||||
}
|
||||
|
||||
bitmap.SaveFile(path_phsource+_T("/envelopes.png"),wxBITMAP_TYPE_PNG);
|
||||
|
||||
if(f_txt != NULL)
|
||||
fclose(f_txt);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1630,7 +1630,7 @@ if(option_log_frames)
|
||||
range = (wvoice->pitch_range * embedded_value[EMBED_R])/50;
|
||||
|
||||
// compensate for change in pitch when the range is narrowed or widened
|
||||
base -= (range - wvoice->pitch_range)*20;
|
||||
base -= (range - wvoice->pitch_range)*18;
|
||||
|
||||
pitch_base = base + (pitch1 * range);
|
||||
pitch_range = base + (pitch2 * range) - pitch_base;
|
||||
|
||||
Reference in New Issue
Block a user