Browse Source

[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
master
jonsd 17 years ago
parent
commit
39e8e1dcb6

+ 8
- 8
dictsource/dict_phonemes View File

E~ i i: o O O~ u W E~ i i: o O O~ u W
w^i W~ y Y 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 Dictionary hi_dict
uai y uai y


(u) : f h j k kh l (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 Dictionary jbo_dict

+ 15
- 3
dictsource/fr_list View File



// 2006-11-18 Gilles Casse <[email protected]> // 2006-11-18 Gilles Casse <[email protected]>
// //
// Updated 2008-01-29 Michel Such <[email protected]>
// Updated 2008-02-06 Michel Such <[email protected]>
// //
// * Numbers, a few abbreviations and exceptions. // * Numbers, a few abbreviations and exceptions.
// //
?2 des dez2 $u+ $nounf ?2 des dez2 $u+ $nounf




à $u $brk
à $u
au $u $brk au $u $brk
aux $u $brk aux $u $brk


pour $u pour $u
en $u en $u
(en effet) A~nEf'E $brk (en effet) A~nEf'E $brk
(en suspens) A~||sysp'A~


vers $u vers $u
avec $u avec $u
consent kO~s'A~t2 consent kO~s'A~t2
scient si scient si
bénéficient benefisi $verb bénéficient benefisi $verb
charisme karism
concurrent kO~kyR'A~ concurrent kO~kyR'A~
content kO~t@-t2 $verb content kO~t@-t2 $verb
couvent k'uvt2 $verb couvent k'uvt2 $verb






mens mA~z2
sens sA~s sens sA~s
sens sA~z2 $verb
c'est sEt2 $u+ c'est sEt2 $u+
qu'à ka qu'à ka
m'y mi $verbf m'y mi $verbf
boy bOj boy bOj
byte bajt byte bajt
bytes bajts bytes bajts
cleaner kli:n@r
(cyber link) sibEr||link (cyber link) sibEr||link
debian dEbjAn debian dEbjAn
driver drajv@rz2 driver drajv@rz2
emacspeak Emakspi:k emacspeak Emakspi:k
espeak @spi:k espeak @spi:k
ethernet etERnEt ethernet etERnEt
exit egzit
firefox faj@RfOks firefox faj@RfOks
(fire wire) faj@R||wajr
firewire faj@Rwajr
google gu:g'@l google gu:g'@l
girl g@Rl girl g@Rl
gnome gnom gnome gnom
gnu gnu gnu gnu
hamburger _!A~b@rg@r
insight insajt insight insajt
internet E~tERnEt internet E~tERnEt
(internet explorer) E~tErn'Et||EksplOr'@r (internet explorer) E~tErn'Et||EksplOr'@r
klaxon klaksOn
leader li:d@R leader li:d@R
light lajt light lajt
link link link link
new nj'u new nj'u
news nj'uz news nj'uz
night najt night najt
not nOt
ok oke ok oke
open Op'@n open Op'@n
outlook autluk outlook autluk
sun s@n sun s@n
sunlight s@nlajt sunlight s@nlajt
(text aloud) tEkst||@lawd (text aloud) tEkst||@lawd
then DEn $u
thunderbird f@ndERb@Rd thunderbird f@ndERb@Rd
ubuntu ubuntu ubuntu ubuntu
update @pd'E:jt update @pd'E:jt
upload @plod upload @plod
viavoice viavOjs viavoice viavOjs
while wajll
windows windoz windows windoz
word wWRd word wWRd
wright _^_EN wright _^_EN








+ 38
- 21
dictsource/fr_rules View File



// 2006-11-18 Gilles Casse <[email protected]> // 2006-11-18 Gilles Casse <[email protected]>
// //
// Updated: 2008-02-04 Michel Such <[email protected]>
// Updated: 2008-02-06 Michel Such <[email protected]>
// //
// * The rules are based on Cicero TTS. // * The rules are based on Cicero TTS.
// //
a (il_ a a (il_ a
aie (me E // paiement aie (me E // paiement
ai E // aile ai E // aile
a (lk O // talk
a (ll_ O // football handball
am (b A~ // jambon am (b A~ // jambon
am (p A~ // camp am (p A~ // camp
am (m a // programmation am (m a // programmation
cch k // bacchanale cch k // bacchanale
cc (Y ks // accéder cc (Y ks // accéder
cc k // occuper cc k // occuper
ar) ch (éo k // archéologue
ar) ch (ét k // archétype architecte ar) ch (ét k // archétype architecte
_A) ch (o_ k // écho _A) ch (o_ k // écho
_eu) ch (ari k // eucharistie
or) ch (esC k // orchestre or) ch (esC k // orchestre
or) ch (iC k // orchidée or) ch (iC k // orchidée
sy) ch (o k // psycho sy) ch (o k // psycho
_) ch (ao k // chaos, chaotique
_) ch (or k // chorale _) ch (or k // chorale
ch (r k // chrétien ch (r k // chrétien
ch (l k ch (l k
Csan) d (_ d Csan) d (_ d
_tan) d (_ d // stand _tan) d (_ d // stand
Ctan) d (_ d Ctan) d (_ d
for) d (_ d
lor) d (_ d


Can) d (_ t2 // grand ami, grand marchand Can) d (_ t2 // grand ami, grand marchand
Cen) d (_ t2 Cen) d (_ t2
.group e .group e
e (Ce_ E e (Ce_ E
eau o // bateau cheveaux eau o // bateau cheveaux
Cr) ea (m i: // stream
Cl) ea (n i: // clean
j) e (a // Jean Jeanne j) e (a // Jean Jeanne
sp) ea (k i: // speak speaker sp) ea (k i: // speak speaker
p) ect (_ E // suspect p) ect (_ E // suspect
_pi) ed e // pied _pi) ed e // pied
ee i: // meeting ee i: // meeting
_cl) ef (_ e // clef _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 (C E~ // peindre
ein (_ E~ ein (_ E~
e (il E // vieille e (il E // vieille
Ci) en (C E~ // tien Ci) en (C E~ // tien
Ci) en (c A~ // science Ci) en (c A~ // science


_am) en (_ En // amen


AA) en (_ E~ AA) en (_ E~
AC) en (_ E~ // examen
C) en (_ En // amen, abdomen, golden
xam) en (_ E~ // examen
CA) en (_ E~ // rien CA) en (_ E~ // rien
CC) en (_ E~


en (s_ A~ en (s_ A~
en (CA A~ // pentathlon en (CA A~ // pentathlon
en (CC A~ // entre en (CC A~ // entre
en (ch_ En // french en (ch_ En // french
sp) ens (_ Ens // suspens
éC) ens (_ A~z2 // dépens démens


_C) er (_ ER // fer _C) er (_ ER // fer
_Ch) er (_ ER // cher _Ch) er (_ ER // cher
_) h (ai _! // haine haillon _) h (ai _! // haine haillon
_) h (al _! // halte _) h (al _! // halte
_) h (amea _! // hameau _) h (amea _! // hameau
_) h (amb _! // hamburger
_) h (amp _! // hampe _) h (amp _! // hampe
_) h (an _! // hanche _) h (an _! // hanche
_) h (app _! // happer _) h (app _! // happer
_) h (ibo _! // hibou _) h (ibo _! // hibou
_) h (ide _! // hideux _) h (ide _! // hideux
_) h (oll _! // hollandais _) h (oll _! // hollandais
_) h (oma _! // homard
_) h (ong _! // hongrois _) h (ong _! // hongrois
_) h (ont _! // honte _) h (ont _! // honte
_) h (ord _! // horde _) h (ord _! // horde
o (mm O // comme o (mm O // comme
radi) o (C o // radiophonique radi) o (C o // radiophonique
dr) o (me_ O // vélodrome dr) o (me_ O // vélodrome
ph) o (ne_ O // téléphone
om (b O~ // bombe om (b O~ // bombe
om (p O~ // pompe om (p O~ // pompe
n) om (_ O~ // nom n) om (_ O~ // nom
onh (A On // bonhomme onh (A On // bonhomme


_b) on (_A On // liaison: bon élève _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 z) o (ne_ o // amazone
c) o (ne_ o c) o (ne_ o
h) o (ne_ o h) o (ne_ o
ph) o (ne_ O // téléphone
r) o (ne_ o 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 alc) oo (l O // alcool
oo (Ce u // boomer
C) oot ut // bootable football
z) oo o // zoo z) oo o // zoo
z) oo (l oo // zoologue
z) oo (m u // zoom
oo (X u // pool oo (X u // pool
_gal) op (_ o // galop _gal) op (_ o // galop


_sir) op (_ o // sirop _sir) op (_ o // sirop


_tr) op (_ o // trop
_tr) op (_ op2 // trop
v) ost (_ o // Prévost v) ost (_ o // Prévost
o (sA o // poser o (sA o // poser
ot (_ o // mot dépots 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 ou u // hibou brouillard


.group q .group q
q k // coq 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 (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 qu k // quatre
_) que (_ k@ // que _) que (_ k@ // que
_) qu' (P3 k // qu'il _) qu' (P3 k // qu'il
uc) un (_ W~n2 // aucun uc) un (_ W~n2 // aucun
un (_ W~n2 // un avion un (_ W~n2 // un avion


fl) ux (_ y // flux, reflux
g) u (A // fatigue g) u (A // fatigue
g) u (ï y // ambiguïté g) u (ï y // ambiguïté
g) u (ë y // ambiguë g) u (ë y // ambiguë

+ 5
- 0
dictsource/zh_rules View File

// (D will match on a digit and also if no digit is present. (special for tone // (D will match on a digit and also if no digit is present. (special for tone
language). language).


// 儿 兒 erhua

.group a .group a
a A a A
ai ai ai ai
ue yE //üe ue yE //üe
ui uei ui uei
u (DnK u@ u (DnK u@
k) u (DnK wu@
_h) u (DnK wu@
t) u (DnK wu@
uo uo uo uo


L01) u y /// j,q,x,y + u L01) u y /// j,q,x,y + u

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

gender male gender male


dictrules 1 dictrules 1
intonation 3
intonation 2

+ 6
- 5
espeak-data/voices/zh View File

name Mandarin test
name Mandarin
language zh language zh
gender male gender male
words 1 words 1
pitch 80 118


//for some dialects //for some dialects


//[en]: replace ng with n //[en]: replace ng with n
//[zh]: 无后鼻音,ng读成n
//[zh]: 锟睫猴拷锟斤拷锟斤拷锟斤拷ng锟斤拷锟絥
//replace 0 N n //replace 0 N n


//[en]: replace rfx consonants //[en]: replace rfx consonants
//[zh]: 无卷舌音,r读成l或z,er读成e
//[zh]: 锟睫撅拷锟斤拷锟斤拷锟斤拷r锟斤拷锟絣锟斤拷z锟斤拷er锟斤拷锟絜
//replace 0 ts.h tsh //replace 0 ts.h tsh
//replace 0 ts. ts //replace 0 ts. ts
//replace 0 s. s //replace 0 s. s
//replace 0 @r @ //replace 0 @r @


//[en]: replace beginning n or l //[en]: replace beginning n or l
//[zh]: 不分nl,n读成l或l读成n
//[zh]: 锟斤拷锟斤拷nl锟斤拷n锟斤拷锟絣锟斤拷l锟斤拷锟絥
//replace 2 n l //replace 2 n l
//replace 2 l n //replace 2 l n


//[en]: replace beginning w with v //[en]: replace beginning w with v
//[zh]: w读成v
//[zh]: w锟斤拷锟絭
//replace 0 w v //replace 0 w v

+ 10
- 6
phsource/compile_report View File

eo 13 111 eo 13 111
jbo 4 112 jbo 4 112
fi 40 130 fi 40 130
fr 43 124
fr_ca 11 124
fr 44 125
fr_ca 11 125
hi 50 135 hi 50 135
ta 15 137 ta 15 137
hu 23 115 hu 23 115
is 32 124 is 32 124
vi 42 137 vi 42 137
zhy 40 132 zhy 40 132
zh 62 147
zh 64 148
sw 14 108 sw 14 108
th 50 142 th 50 142
id 14 120 id 14 120
[dZ;] ru [dZ;] ru
dzh/xdz_pzd [J] base dzh/xdz_pzd [J] base
[J2] hi [J2] hi
envelope/i_risefall [11] zh
envelope/p_214 [214] zh envelope/p_214 [214] zh
[5] th [5] th
envelope/p_451 [3] th envelope/p_451 [3] th
[7] vi [7] vi
[1] zhy [1] zhy
[4] zhy [4] zhy
[11] zh
[21] zh [21] zh
[51] zh [51] zh
[22] zh [22] zh
n/ni [(i)] base n/ni [(i)] base
[n] zh [n] zh
nn/inn [(i)] base nn/inn [(i)] base
[N] zh
n/nj [n] base n/nj [n] base
[n.] base [n.] base
[n^] base [n^] base
ufric/sh_pzd_ [S;] base ufric/sh_pzd_ [S;] base
[Z;] base [Z;] base
ufric/sh_rfx [s.] base ufric/sh_rfx [s.] base
[s.] zh
ufric/sh_sr [S#] zh
ufric/sh_sr.wav [S] sr ufric/sh_sr.wav [S] sr
[Z] sr [Z] sr
[dZ] sr [dZ] sr
ustop/null [?] base ustop/null [?] base
ustop/p [p] base ustop/p [p] base
[p] fr [p] fr
[p2] fr
[ph] hi [ph] hi
[p] zhy [p] zhy
[ph] th [ph] th
ustop/p_ [p] base ustop/p_ [p] base
[p] fr [p] fr
[p2] fr
[ph] hi [ph] hi
[ph] zh [ph] zh
ustop/percus10 [(X1] base ustop/percus10 [(X1] base
[a:] cs [a:] cs
[a:] la [a:] la
[a] is [a] is
[A] zh
vowel/a#_3 [a2] en vowel/a#_3 [a2] en
[a2] en_n [a2] en_n
[a2] en_us [a2] en_us
[A] no [A] no
[A:] no [A:] no
[aa] zhy [aa] zhy
[A] zh
vowel/aa# [0] en_wi vowel/aa# [0] en_wi
[a2] fi [a2] fi
vowel/aa_2 [A:] en vowel/aa_2 [A:] en
[U] ta [U] ta
[U] tr [U] tr
vowel/uu_3 [u] af vowel/uu_3 [u] af
[y] zh
vowel/uu_4 [U] fi vowel/uu_4 [U] fi
[U] sv [U] sv
vowel/uu_bck [U] en_n vowel/uu_bck [U] en_n

+ 13
- 1
phsource/ph_french View File

phoneme A~ phoneme A~
vowel starttype (a) endtype (a) vowel starttype (a) endtype (a)
length 180 length 180
formants vnasal/aa_n2
formants vnasal/aa_n2 // silent unless followed by vowel
endphoneme endphoneme




endphoneme 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 phoneme r
vcd uvl frc starttype r endtype r vcd uvl frc starttype r endtype r
vowelin f1=0 f2=800 -100 100 f3=-400 100 vowelin f1=0 f2=800 -100 100 f3=-400 100
endphoneme endphoneme






+ 27
- 8
phsource/ph_zh View File



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


phoneme 21 // tone: low fall phoneme 21 // tone: low fall
vowelin f1=1 f2=1700 0 200 f3=-300 80 f4 vowelin f1=1 f2=1700 0 200 f3=-300 80 f4
vowelout f1=1 f2=1700 0 200 f3=-300 80 f4 rms=30 vowelout f1=1 f2=1700 0 200 f3=-300 80 f4 rms=30
lengthmod 2 lengthmod 2
wave ustop/k_unasp_
wave ustop/k_unasp_%75
endphoneme endphoneme


phoneme kh phoneme kh
wave ufric/sh_pzd wave ufric/sh_pzd
endphoneme 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 phoneme ts
vls alv afr sibilant vls alv afr sibilant
vowelin f1=0 f2=1700 -300 300 f3=-100 80 vowelin f1=0 f2=1700 -300 300 f3=-100 80
vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
lengthmod 2 lengthmod 2
wave ustop/ts_unasp%50
wave ustop/ts_unasp%70
endphoneme endphoneme


phoneme tsh phoneme tsh


phoneme N //should be more different from n phoneme N //should be more different from n
vcd vel nasal 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 formants NULL
before _ nn/nn2_ before _ nn/nn2_
after _ nn/_nn after _ nn/_nn
lengthmod 7 lengthmod 7
after (i) nn/inn
// after (i) nn/inn
endphoneme endphoneme


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




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


endphoneme endphoneme


phoneme y phoneme y
vowel starttype (i) endtype (i)
vowel starttype (i) endtype (u)
length 250 length 250
formants vowel/y_2 formants vowel/y_2
before N vowel/uu_3
endphoneme endphoneme


phoneme yu //try more before N phoneme yu //try more before N

BIN
phsource/vwl_zh/a_n View File


BIN
phsource/vwl_zh/ie View File


+ 3
- 100
src/compiledata.cpp View File

extern void MakeVowelLists(void); extern void MakeVowelLists(void);
extern void FindPhonemesUsed(void); extern void FindPhonemesUsed(void);
extern void DrawEnvelopes(); 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); extern int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, char *fname, int flags);


static int markers_used[8]; static int markers_used[8];
int n_envelopes = 0; int n_envelopes = 0;
char envelope_paths[N_ENVELOPES][80]; char envelope_paths[N_ENVELOPES][80];
unsigned char envelope_dat[N_ENVELOPES][ENV_LEN]; unsigned char envelope_dat[N_ENVELOPES][ENV_LEN];
FILE *f_phdata;






int LoadSpect(const char *path, int control); int LoadSpect(const char *path, int control);
int LoadWavefile(FILE *f, const char *fname); int LoadWavefile(FILE *f, const char *fname);
int LoadEnvelope(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 LoadDataFile(const char *path, int control);
int AddSpect(int phcode, int *list, int control); int AddSpect(int phcode, int *list, int control);
void AddSpectList(int *list, int control); void AddSpectList(int *list, int control);




FILE *f_in; FILE *f_in;
FILE *f_phdata;
FILE *f_phcontents; FILE *f_phcontents;
FILE *f_errors; FILE *f_errors;
FILE *f_phindex; FILE *f_phindex;
} // end of 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 ix;
int n; int n;

+ 183
- 195
src/intonation.cpp View File

#define PITCHrise 1 #define PITCHrise 1
#define PITCHfrise 2 // and 3 must be for the varient preceded by 'r' #define PITCHfrise 2 // and 3 must be for the varient preceded by 'r'
#define PITCHfrise2 4 // and 5 must be the 'r' variant #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 */ /* 0 fall */
unsigned char env_fall[128] = { unsigned char env_fall[128] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x04, 0x04, 0x05, 0x06, 0x07, 0x08, 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 }; 0x09, 0x0a, 0x0b, 0x0c, 0x0e, 0x0f, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20 };



/*
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 };


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 };


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 };





unsigned char *envelope_data[16] = {
env_fall, env_rise, env_frise, env_r_frise,
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 };

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 };

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 };

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[18] = {
env_fall,
env_rise,
env_frise, env_r_frise,
env_frise2, env_r_frise2, 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
}; };




static short oflow_test2[] = {20, 0, 20, 0, 20}; static short oflow_test2[] = {20, 0, 20, 0, 20};
static short back_emf[] = {35, 32, 0}; static short back_emf[] = {35, 32, 0};


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;
#define N_TONE_HEAD_TABLE 13
#define N_TONE_NUCLEUS_TABLE 13



typedef struct {
unsigned char pre_start; unsigned char pre_start;
unsigned char pre_end; unsigned char pre_end;




char n_overflow; char n_overflow;
short *overflow; short *overflow;
short *backwards;

unsigned char tail_start;
unsigned char tail_end;
unsigned char tail_shape;
} TONE_TABLE;

#define N_TONE_TABLE 13

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},

} TONE_HEAD;


{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},
typedef struct {
unsigned char pitch_env0; /* pitch envelope, tonic syllable at end */
unsigned char tonic_max0;
unsigned char tonic_min0;


{PITCHfrise, 39, 15, PITCHfall, 28, 14, // 10 question
20, 25, 34, 22, drops_0, 3, 3, 5, oflow, NULL, 20, 36, 0},
unsigned char pitch_env1; /* followed by unstressed */
unsigned char tonic_max1;
unsigned char tonic_min1;


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


{PITCHfall, 35, 9, PITCHfall, 35, 12, // 12 test
19, 26, 36, 20, drops_0, 2, 4, 5, oflow_test2, NULL, 16, 10, 0},
unsigned char tail_start;
unsigned char tail_end;
unsigned char flags;
} TONE_NUCLEUS;

#define T_EMPH 1

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
}; };


unsigned char punctuation_to_tone[INTONATION_TYPES][PUNCT_INTONATIONS] = { unsigned char punctuation_to_tone[INTONATION_TYPES][PUNCT_INTONATIONS] = {
{0,1,2,3,0,4}, {0,1,2,3,0,4},
{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,9,10,3,0,0},
{8,8,10,3,0,0}, {8,8,10,3,0,0},
{11,11,11,11,0,0}, // 6 test {11,11,11,11,0,0}, // 6 test






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. /* Calculate pitches until next RESET or tonic syllable, or end.
Increment pitch if stress is >= min_stress. Increment pitch if stress is >= min_stress.


static short continue_tab[5] = {-13, 16, 10, 4, 0}; static short continue_tab[5] = {-13, 16, 10, 4, 0};


drops = t->body_drops;
drops = th->body_drops;


if(continuing) if(continuing)
{ {
overflow = 0; overflow = 0;
n_overflow = 5; n_overflow = 5;
overflow_tab = continue_tab; 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 else
{ {
n_overflow = t->n_overflow;
overflow_tab = t->overflow;
n_overflow = th->n_overflow;
overflow_tab = th->overflow;
initial = 1; initial = 1;
} }


overflow = 0; overflow = 0;
n_steps = n_primary = count_increments(ix,end_ix,min_stress); 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) 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); increment = increment / (n_steps -1);
} }
else else
increment = 0; increment = 0;


pitch = t->body_start << 8;
pitch = th->body_start << 8;
} }
else else
{ {
pitch += increment; pitch += increment;
else 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) if(overflow >= n_overflow)
{ {
overflow = 0; overflow = 0;
overflow_tab = t->overflow;
overflow_tab = th->overflow;
} }
} }
} }
n_steps--; n_steps--;


n_primary--; 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;
} }
} }


{ {
/* unstressed, drop pitch if preceded by PRIMARY */ /* unstressed, drop pitch if preceded by PRIMARY */
if((syllable_tab[ix-1].stress & 0x3f) >= SECONDARY) 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 else
set_pitch(syl,pitch,drops[stress]); set_pitch(syl,pitch,drops[stress]);
} }
drop = -increment; drop = -increment;
if(drop < min_drop[stress]) if(drop < min_drop[stress])
drop = min_drop[stress]; drop = min_drop[stress];
pitch += increment; pitch += increment;
set_pitch(syl,pitch,drop);

if(drop > 0x900)
drop = 0x900;
set_pitch(syl, pitch, drop);
} }
ix++; ix++;






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; int ix;
TONE_TABLE *t;
TONE_HEAD *th;
TONE_NUCLEUS *tn;
int drop; int drop;
int continuing = 0; int continuing = 0;


if(start > 0) if(start > 0)
continuing = 1; continuing = 1;


t = &tone_table[group_tone];
th = &tone_head_table[head_tone];
tn = &tone_nucleus_table[nucleus_tone];
ix = start; ix = start;


/* vowels before the first primary stress */ /* vowels before the first primary stress */


if(number_pre > 0) 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 */ /* body of tonic segment */
{ {
tone_posn = tone_posn2; // put tone on the penultimate stressed word 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) if(no_tonic)
return(0); return(0);
/* tonic syllable */ /* tonic syllable */
/******************/ /******************/
if(tn->flags & T_EMPH)
{
syllable_tab[ix].flags |= SYL_EMPHASIS;
}

if(number_tail == 0) 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 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; syllable_tab[tone_posn].env = tone_pitch_env;
/* tail, after the tonic syllable */ /* 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); return(tone_pitch_env);
} /* end of calc_pitches */ } /* end of calc_pitches */
} }
} }


phoneme_list[final_stressed].tone = 7;

// language specific, changes to tones // language specific, changes to tones
if(translator_name == L('v','i')) if(translator_name == L('v','i'))
{ {
tone_promoted = 0; 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(prev_tph->mnemonic == 0x343132) // [214]
{ {
if(tph->mnemonic == 0x343132) // [214] if(tph->mnemonic == 0x343132) // [214]
} }
} }


phoneme_list[final_stressed].tone = 7;


} // end of Translator::CalcPitches_Tone } // end of Translator::CalcPitches_Tone




count_pitch_vowels(st_start, ix, n_st); count_pitch_vowels(st_start, ix, n_st);
if((ix < n_st) || (clause_type == 0)) 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 else
calc_pitches(st_start, ix, group_tone);
calc_pitches(st_start, ix, group_tone, group_tone);


st_start = ix; st_start = ix;
} }
// end of clause after this syllable, indicated by a phonPAUSE_CLAUSE phoneme // end of clause after this syllable, indicated by a phonPAUSE_CLAUSE phoneme
st_clause_end = st_ix+1; st_clause_end = st_ix+1;
count_pitch_vowels(st_start, st_clause_end, st_clause_end); 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; st_start = st_clause_end;
} }
} }
if(st_start < st_ix) if(st_start < st_ix)
{ {
count_pitch_vowels(st_start, st_ix, n_st); 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
src/menus.cpp View File

file_menu->Append(SPECTSEQ_SAVE, _("&Save")); file_menu->Append(SPECTSEQ_SAVE, _("&Save"));
file_menu->Append(SPECTSEQ_SAVEAS, _("Save &As")); file_menu->Append(SPECTSEQ_SAVEAS, _("Save &As"));
file_menu->Append(SPECTSEQ_SAVESELECT, _("Save Selection")); 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(SPECTSEQ_CLOSE, _("&Close"));
// file_menu->Append(MENU_CLOSE_ALL, _T("Close &All")); // file_menu->Append(MENU_CLOSE_ALL, _T("Close &All"));
} }

+ 10
- 3
src/prosodydisplay.cpp View File

menu_envelopes->Append(0x101,_T("Rise")); menu_envelopes->Append(0x101,_T("Rise"));
menu_envelopes->Append(0x102,_T("Fall-rise")); menu_envelopes->Append(0x102,_T("Fall-rise"));
menu_envelopes->Append(0x103,_T("Fall-rise (R)")); 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 = new wxMenu;
menu_prosody->Append(1,_T("Pitch envelope"),menu_envelopes); menu_prosody->Append(1,_T("Pitch envelope"),menu_envelopes);
for(ix=0; ix<=width; ix+=4) for(ix=0; ix<=width; ix+=4)
{ {
x = int((ix * 127.9)/width); x = int((ix * 127.9)/width);
pitch = ph->pitch1 + (pitchr * env[x])/256;
pitch = p1 + (pitchr * env[x])/256;
y = y1-int(pitch * scaley); y = y1-int(pitch * scaley);
if(ix > 0) if(ix > 0)
dc.DrawLine(x1+ix-4,y2,x1+ix,y); dc.DrawLine(x1+ix-4,y2,x1+ix,y);

+ 2
- 2
src/readclause.cpp View File

{"x-low",20}, {"x-low",20},
{"low",50}, {"low",50},
{"medium",100}, {"medium",100},
{"high",125},
{"x-high",150},
{"high",140},
{"x-high",180},
{NULL, -1}}; {NULL, -1}};


static const MNEM_TAB *mnem_tabs[5] = { static const MNEM_TAB *mnem_tabs[5] = {

+ 3
- 0
src/setlengths.cpp View File

{ {
// tonic syllable, include a constant component so it doesn't decrease directly with speed // tonic syllable, include a constant component so it doesn't decrease directly with speed
length_mod += 20; length_mod += 20;
if(emphasized)
length_mod += 10;
} }
else else
if(emphasized) if(emphasized)
// set pitch for pre-vocalic part // set pitch for pre-vocalic part
if(pitch_start - last_pitch > 8) // was 9 if(pitch_start - last_pitch > 8) // was 9
last_pitch = pitch_start - 8; last_pitch = pitch_start - 8;

prev->pitch1 = last_pitch; prev->pitch1 = last_pitch;
prev->pitch2 = pitch_start; prev->pitch2 = pitch_start;
if(last_pitch < pitch_start) if(last_pitch < pitch_start)

+ 1
- 1
src/spect.h View File

int Save(wxOutputStream& stream, int selection); int Save(wxOutputStream& stream, int selection);
int Load(wxInputStream& stream); int Load(wxInputStream& stream);
void Draw(wxDC &dc, int start_y, int end_y); 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 MakeWave(int start, int end, PitchEnvelope &pitch);


void InterpolatePeaks(int on); void InterpolatePeaks(int on);

+ 14
- 12
src/spectdisplay.cpp View File





void SpectDisplay::SavePitchenv(PitchEnvelope &pitch) void SpectDisplay::SavePitchenv(PitchEnvelope &pitch)
{//==============================================
{//==================================================
// save the pitch envelope // save the pitch envelope


int ix; int ix;
FILE *f_env;
wxString filename; wxString filename;
char fname[200];


filename = wxFileSelector(_T("(Save pitch envelope"),path_pitches,_T(""),_T(""),_T("*"),wxSAVE); filename = wxFileSelector(_T("(Save pitch envelope"),path_pitches,_T(""),_T(""),_T("*"),wxSAVE);
if(filename.IsEmpty()) if(filename.IsEmpty())
return; 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; 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++) 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 } // end of SpectDisplay::SavePitchenv




setlocale(LC_NUMERIC,"C"); // read numbers in the form 1.23456 setlocale(LC_NUMERIC,"C"); // read numbers in the form 1.23456
spectseq->Load(stream); spectseq->Load(stream);
spectseq->name = leaf; spectseq->name = leaf;
spectseq->MakePitchenv(spectseq->pitchenv);
spectseq->MakePitchenv(spectseq->pitchenv,0,spectseq->numframes-1);


if(event.GetId() == MENU_SPECTRUM) if(event.GetId() == MENU_SPECTRUM)
path_spectload = path.GetPath(); path_spectload = path.GetPath();

+ 4
- 4
src/spectseq.cpp View File

} // end of CopyDown } // end of CopyDown




void SpectSeq::MakePitchenv(PitchEnvelope &pitchenv)
{//=================================================
void SpectSeq::MakePitchenv(PitchEnvelope &pitchenv, int start_frame, int end_frame)
{//=================================================================================
double f; double f;
double min=8000; double min=8000;
double max=0; double max=0;


memset(pitchenv.env,127,128); 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; if((f = frames[ix]->pitch) == 0) continue;
nx++; nx++;
ay = new float[nx+1]; ay = new float[nx+1];


nx = 0; nx = 0;
for(ix=0; ix<numframes; ix++)
for(ix=start_frame; ix<=end_frame; ix++)
{ {
if((f = frames[ix]->pitch) == 0) continue; if((f = frames[ix]->pitch) == 0) continue;



+ 1
- 1
src/synthdata.cpp View File

#include "translate.h" #include "translate.h"
#include "wave.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; const int version_phdata = 0x013105;


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

+ 1
- 1
src/synthesize.h View File

int SelectPhonemeTableName(const char *name); 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 formant_rate[]; // max rate of change of each formant
extern int speed_factor1; extern int speed_factor1;
extern int speed_factor2; extern int speed_factor2;

+ 1
- 1
src/tr_languages.cpp View File

case L('z','h'): case L('z','h'):
case L_zhy: 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 }; static const unsigned char stress_amps_zh[] = {22,16, 22,22, 22,22, 22,22 };


tr = new Translator; tr = new Translator;

+ 18
- 2
src/vowelchart.cpp View File

int ix_env; int ix_env;
int y_base; int y_base;
int x; int x;
FILE *f_txt=NULL;
unsigned char *env; unsigned char *env;
char name[80];
char name[200];


wxBitmap bitmap(WD_ENV,HT_ENV*n_envelopes); wxBitmap bitmap(WD_ENV,HT_ENV*n_envelopes);


dc.SetFont(*wxSWISS_FONT); dc.SetFont(*wxSWISS_FONT);
dc.Clear(); 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++) for(ix_env=0; ix_env<n_envelopes; ix_env++)
{ {
{ {
dc.DrawLine(x*2, y_base-env[x]/2, (x+1)*2, y_base-env[x+1]/2); 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); bitmap.SaveFile(path_phsource+_T("/envelopes.png"),wxBITMAP_TYPE_PNG);

if(f_txt != NULL)
fclose(f_txt);
} }



+ 1
- 1
src/wavegen.cpp View File

range = (wvoice->pitch_range * embedded_value[EMBED_R])/50; range = (wvoice->pitch_range * embedded_value[EMBED_R])/50;


// compensate for change in pitch when the range is narrowed or widened // 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_base = base + (pitch1 * range);
pitch_range = base + (pitch2 * range) - pitch_base; pitch_range = base + (pitch2 * range) - pitch_base;

Loading…
Cancel
Save