Browse Source

Lang=fr change to phonemes [o] [O] [A~] [O~] [R]

Added new phonemes [s.] and [z.] (as common phonemes), use in Lang=ru, Lang=sv, Lang=hi
Remake WAV files for [s;] and [z;] phonemes.
espeak_Terminate(), set pointers to NULL after free().
espeak_Initialize(), returns EE_INTERNAL_ERROR (-1) if fails to allocate memory.
Change to the default tone setting (array: tone_points in voices.cpp).


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@5 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 18 years ago
parent
commit
2a5c9b6748

+ 1
- 1
dictsource/hi_list View File

ऱ r@ ऱ r@
व v@ व v@
श S@ श S@
S@ // should be retroflex [S]
s.@ // should be retroflex [S]
स s@ स s@
ह H@ ह H@
क़ q@ क़ q@

+ 3
- 3
dictsource/hi_rules View File

?1 श (_ S ?1 श (_ S


.group ष .group ष
SV //?? or retroflex [S]
ष (B S //??
?1 ष (_ S //??
s.V //?? or retroflex [S]
ष (B s. //??
?1 ष (_ s. //??


.group स .group स
स sV स sV

+ 5
- 5
dictsource/ru_list View File

_3 t;r'i _3 t;r'i
_4 ts;It'yr;I _4 ts;It'yr;I
_5 p;'jat; _5 p;'jat;
_6 S'Es;t;
_6 s.'Es;t;
_7 s;'em _7 s;'em
_8 v'os;E2m _8 v'os;E2m
_9 d;'ev;It; _9 d;'ev;It;
_13 tr;In'AttsVt; _13 tr;In'AttsVt;
_14 ts;It'y@-*nVttsVt; _14 ts;It'y@-*nVttsVt;
_15 p;Itn'AttsVt; _15 p;Itn'AttsVt;
_16 SE#stn'AttsVt;
_16 s.E#stn'AttsVt;
_17 s;Imn'AttsVt; _17 s;Imn'AttsVt;
_18 vOs;Imn'AttsVt; _18 vOs;Imn'AttsVt;
_19 d;E2v;Itn'AttsVt; _19 d;E2v;Itn'AttsVt;
_3X tr;'ittsVt; _3X tr;'ittsVt;
_4X s'o@-*Ok _4X s'o@-*Ok
_5X p;Id;d;Is;'jat _5X p;Id;d;Is;'jat
_6X SE2z;d;d;Is;'jat
_6X s.E2z;d;d;Is;'jat
_7X s;'emd;E2s;It _7X s;'emd;E2s;It
_8X v'os;E2md;E2s;It _8X v'os;E2md;E2s;It
_9X d;E2v;In'ostO _9X d;E2v;In'ostO
_3C tr;'ista _3C tr;'ista
_4C ts;It'yr;E2sta _4C ts;It'yr;E2sta
_5C p;,It;s'ot _5C p;,It;s'ot
_6C S,E#s;t;s'ot
_6C s.,E#s;t;s'ot
_7C s;,Ims'ot _7C s;,Ims'ot
_8C vOs;Ims'ot _8C vOs;Ims'ot
_9C d;E2v;It;s'ot _9C d;E2v;It;s'ot




// questions // questions
что Sto $u $pause // what, that
что s.to $u $pause // what, that




// misc. // misc.

+ 50
- 46
dictsource/ru_rules View File





.group ж .group ж
_) ж (_ ZE
ж (кY S
ж (кь S
ж (пY S
ж (пь S
ж (сь S
ж (сY S
ж (ть S
ж (тY S
ж (фь S
ж (фY S
ж (ффь S
ж (ффY S
ж (хь S
ж (хY S
ж (хкY S
ж (хкь S
ж Z
_) ж (_ z.E
ж (кY s.
ж (кь s.
ж (пY s.
ж (пь s.
ж (сь s.
ж (сY s.
ж (ть s.
ж (тY s.
ж (фь s.
ж (фY s.
ж (ффь s.
ж (ффY s.
ж (хь s.
ж (хY s.
ж (хкY s.
ж (хкь s.
ж z.


.group з .group з
_) з (_ zE _) з (_ zE
з (сь s; з (сь s;
з (сY s; з (сY s;


з (ж Z
з (ш S
з (ж z.
з (ш s.
з (щ s;s; з (щ s;s;
з (ч s;s; з (ч s;s;
з z з z


.group о .group о
о o о o
о (B oj
о (Cь oj
о (FY oj



.group п .group п
_) п (_ pE _) п (_ pE
с (дY z; с (дY z;
с (дB z; с (дB z;


с (ж Z
с (ш S
с (щ s;s;
с (ч s;s;
с (ж z.
с (ш s.
с (щ s;
с (ч s;


с s с s




т (ж d т (ж d


т t
т t


.group у .group у
_) у (_ u _) у (_ u




.group ш .group ш
_) ш (_ SA
ш (б Z
ш (бь Z
ш (бY Z
ш (бмь Z
ш (бмY Z
ш (бвь Z
ш (бвY Z
ш (г Z
ш (гь Z
ш (гY Z
ш (д Z
ш (дь Z
ш (дY Z
ш (дB Z
ш (ж Z
ш (з Z
ш (зь Z
ш (зY Z
_) ш (_ s.A
ш (б z.
ш (бь z.
ш (бY z.
ш (бмь z.
ш (бмY z.
ш (бвь z.
ш (бвY z.
ш (г z.
ш (гь z.
ш (гY z.
ш (д z.
ш (дь z.
ш (дY z.
ш (дB z.
ш (ж z.
ш (з z.
ш (зь z.
ш (зY z.
ш S
ш s.


.group щ .group щ
_) щ (_ S;ja _) щ (_ S;ja

+ 3
- 3
dictsource/sv_rules View File

.group r .group r
r r r r
r) r r) r
rs S
rs s.
rsi (o rsx' rsi (o rsx'
rsk Sk
rsk s.k
rsk (i rsx rsk (i rsx
rss S
rss s.
rg (_ rj rg (_ rj
radera rad'e:ra radera rad'e:ra



+ 2
- 2
dictsource/vi_rules View File

.group a .group a
a a: a a:
ai a:I ai a:I
qu kw qu kw


.group r .group r
r D
r z;


.group s .group s
s s s s

+ 48
- 45
phsource/compile_report View File

33 phoneme tables 33 phoneme tables
new total new total
base 89 89
en 52 136
en_n 29 136
en_us 36 136
en_sc 39 138
en_rp 34 136
en_wm 30 136
af 37 120
cy 30 115
de 28 112
eo 15 101
fi 40 120
fr 32 113
fr_ca 11 113
hi 50 125
hu 24 106
nl 25 109
pl 17 100
sk 22 115
cs 6 116
hr 15 119
ru 35 116
it 28 109
es 7 109
pt 25 124
pt_pt 17 124
ro 36 133
el 7 109
sv 25 111
no 29 115
vi 41 126
zh_yue 32 117
sw 14 98
base 91 91
en 52 138
en_n 29 138
en_us 36 138
en_sc 39 140
en_rp 34 138
en_wm 30 138
af 37 122
cy 30 117
de 28 114
eo 15 103
fi 40 122
fr 32 115
fr_ca 11 115
hi 50 127
hu 24 108
nl 25 111
pl 17 102
sk 22 117
cs 6 118
hr 15 121
ru 36 119
it 28 111
es 7 111
pt 25 126
pt_pt 17 126
ro 36 135
el 7 111
sv 25 113
no 29 117
vi 41 128
zh_yue 32 119
sw 14 100


3 b/b base hi ro 3 b/b base hi ro
2 b/b_ base hi 2 b/b_ base hi
1 ufric/sh_ base 1 ufric/sh_ base
2 ufric/sh_pzd base ro 2 ufric/sh_pzd base ro
3 ufric/sh_pzd_ base 3 ufric/sh_pzd_ base
5 ufric/s_pzd base ro
2 ufric/sh_rfx base
3 ufric/s_pzd base ro
2 ufric/s_pzd_ base
1 ufric/sx_sv sv 1 ufric/sx_sv sv
1 ufric/th base 1 ufric/th base
1 ufric/th_ base 1 ufric/th_ base
1 vdiph/y#y fi 1 vdiph/y#y fi
2 vdiph/y#y_2 af zh_yue 2 vdiph/y#y_2 af zh_yue
1 vdiph/y#y_3 nl 1 vdiph/y#y_3 nl
2 vnasal/aa_n en fr
1 vnasal/aa_n3 af
1 vnasal/aa_n en
2 vnasal/aa_n3 af fr
2 vnasal/ee_n en fr_ca 2 vnasal/ee_n en fr_ca
3 vnasal/ee_n2 hi pl pt_pt 3 vnasal/ee_n2 hi pl pt_pt
2 vnasal/e_n af pt 2 vnasal/e_n af pt
1 vnasal/oi_n pt 1 vnasal/oi_n pt
2 vnasal/o_n hi pt 2 vnasal/o_n hi pt
1 vnasal/o_n2 af 1 vnasal/o_n2 af
2 vnasal/oo_n en fr
1 vnasal/o_n3 fr
1 vnasal/oo_n en
2 vnasal/oo_n2 hi pl 2 vnasal/oo_n2 hi pl
1 vnasal/&u_n pt 1 vnasal/&u_n pt
1 vnasal/u_n pt 1 vnasal/u_n pt
1 vocw/Q2 nl 1 vocw/Q2 nl
6 vocw/v base ro 6 vocw/v base ro
4 vocw/zh base ro 4 vocw/zh base ro
1 vocw/zh_rfx cs
3 vocw/zh_rfx base cs
3 voc/z base fr ro 3 voc/z base fr ro
3 voc/z_ base fr ro 3 voc/z_ base fr ro
2 voc/zh base ro
2 voc/zh_ base ro
3 voc/zh base ro
3 voc/zh_ base ro
1 voc/zh_2 cs 1 voc/zh_2 cs
2 voc/z_pzd base 2 voc/z_pzd base
2 voc/z_pzd_ base 2 voc/z_pzd_ base
14 vowel/@ base en en_us en_rp cy hi hr 14 vowel/@ base en en_us en_rp cy hi hr
1 vowel/@- base 1 vowel/@- base
4 vowel/& en_rp fi hi sv 4 vowel/& en_rp fi hi sv
5 vowel/0 en fr hi it pt
4 vowel/0 en hi it pt
4 vowel/0_2 en_n en_wm pt_pt sw 4 vowel/0_2 en_n en_wm pt_pt sw
5 vowel/0_3 en_us en_sc en_rp hu 5 vowel/0_3 en_us en_sc en_rp hu
1 vowel/@_2 fr 1 vowel/@_2 fr
5 vowel/a_2 eo it pt_pt ro vi 5 vowel/a_2 eo it pt_pt ro vi
3 vowel/a#_2 hr sv sw 3 vowel/a#_2 hr sv sw
5 vowel/a_3 en_sc cs 5 vowel/a_3 en_sc cs
11 vowel/a#_3 en en_n en_us en_wm de hi pt_pt vi zh_yue
12 vowel/a#_3 en en_n en_us en_wm de hi ru pt_pt vi zh_yue
4 vowel/a_4 en_wm el vi 4 vowel/a_4 en_wm el vi
2 vowel/a_5 sv sw 2 vowel/a_5 sv sw
7 vowel/aa en_us fi fr_ca no zh_yue 7 vowel/aa en_us fi fr_ca no zh_yue
2 vowel/ii_4 en_rp 2 vowel/ii_4 en_rp
6 vowel/ii_en en en_n 6 vowel/ii_en en en_n
5 vowel/@_low hi ro no 5 vowel/@_low hi ro no
9 vowel/o en en_wm de fr hi it pt_pt sv
8 vowel/o en en_wm de hi it pt_pt sv
4 vowel/o_2 cy hi hu no 4 vowel/o_2 cy hi hu no
2 vowel/o-_2 en_n en_wm 2 vowel/o-_2 en_n en_wm
2 vowel/o_3 en_sc 2 vowel/o_3 en_sc
1 vowel/o-_3 en_rp 1 vowel/o-_3 en_rp
1 vowel/o_4 en_n
1 vowel/o_6 nl
2 vowel/o_4 en_n fr
2 vowel/o_6 fr nl
4 vowel/oe en af de fr 4 vowel/oe en af de fr
1 vowel/oe_2 no 1 vowel/oe_2 no
1 vowel/oe_4 sv 1 vowel/oe_4 sv

+ 6
- 6
phsource/ph_french View File

phoneme o phoneme o
vowel starttype (o) endtype (o) vowel starttype (o) endtype (o)
length 166 length 166
formants vowel/o
formants vowel/o_4
endphoneme endphoneme




phoneme O phoneme O
vowel starttype (o) endtype (o) vowel starttype (o) endtype (o)
length 190 length 190
formants vowel/0
formants vowel/o_6
endphoneme endphoneme




phoneme A~ phoneme A~
vowel starttype (a) endtype (a) vowel starttype (a) endtype (a)
length 222 length 222
formants vnasal/aa_n
formants vnasal/aa_n3
endphoneme endphoneme




phoneme O~ phoneme O~
vowel starttype (o) endtype (o) vowel starttype (o) endtype (o)
length 222 length 222
formants vnasal/oo_n
formants vnasal/o_n3
endphoneme endphoneme




length 100 length 100
lengthmod 7 lengthmod 7
beforenotvowel r/ beforenotvowel r/
trill
formants vwl_fr/@R+r3/rx%80 formants vwl_fr/@R+r3/rx%80
endphoneme endphoneme


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








+ 6
- 0
phsource/ph_russian View File

length 100 length 100
endphoneme endphoneme


phoneme a#
vowel starttype (a) endtype (a)
formants vowel/a#_3
length 100
endphoneme




+ 27
- 4
phsource/phonemes View File

endphoneme endphoneme




phoneme z.
vcd pla frc sibilant
vowelin f1=0 f2=1800 -100 300 f3=-300 80
vowelout f1=2 f2=1800 -100 300 f3=-300 80 brk
formants voc/zh+vocw/zh_rfx
before _ voc/zh_+vocw/zh_rfx
lengthmod 6
switchvoicing s.
endphoneme


phoneme z; phoneme z;
vcd pal frc sibilant palatal vcd pal frc sibilant palatal
vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70
vowelout f1=2 f2=2300 250 300 f3=-300 80 brk vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
formants voc/z_pzd+ufric/s_pzd%40
before _ voc/z_pzd_+ufric/s_pzd%40
formants voc/z_pzd+ufric/s_pzd%80
before _ voc/z_pzd_+ufric/s_pzd_%80
lengthmod 6 lengthmod 6
switchvoicing s; switchvoicing s;
endphoneme endphoneme
vowelout f1=1 f2=2700 400 600 f3=200 70 rate len=70 vowelout f1=1 f2=2700 400 600 f3=200 70 rate len=70
length 100 length 100
lengthmod 3 lengthmod 3
wave ufric/s_pzd%50
before _ ufric/s_pzd%50
wave ufric/s_pzd
before _ ufric/s_pzd_
switchvoicing z; switchvoicing z;
endphoneme 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%80
before _ ufric/sh_rfx%60
switchvoicing z.
endphoneme


phoneme S; phoneme S;
vls pal frc sibilant palatal vls pal frc sibilant palatal
vowelin f1=1 f2=2700 400 600 f3=200 70 rate len=70 vowelin f1=1 f2=2700 400 600 f3=200 70 rate len=70

BIN
phsource/ufric/s_pzd.wav View File


BIN
phsource/ufric/s_pzd_.wav View File


BIN
phsource/ufric/sh_rfx.wav View File


BIN
phsource/vnasal/o_n3 View File


BIN
phsource/vnasal/oo_n View File


BIN
phsource/vnasal/vowelchart.png View File


BIN
phsource/vowel/V View File


BIN
phsource/vowel/V_2 View File


BIN
phsource/vwl_fr/@R View File


+ 2
- 2
src/dictionary.cpp View File



if((langopts.stress_flags & 0x1000) && (vowel_stress[1] == 0)) if((langopts.stress_flags & 0x1000) && (vowel_stress[1] == 0))
{ {
if((vowel_count == 3) && (vowel_stress[2] >= 4))
// If there is only one syllable before the primary stress, give it a secondary stress
if((vowel_count > 2) && (vowel_stress[2] >= 4))
{ {
// 2-syllable word, put a secondary stress on the initial syllable
vowel_stress[1] = 3; vowel_stress[1] = 3;
} }
} }

+ 1
- 1
src/intonation.cpp View File

{PITCHfrise, 38,10, PITCHfrise2, 36,10, // comma, or question {PITCHfrise, 38,10, PITCHfrise2, 36,10, // comma, or question
20, 25, 34, 20, drops_0, 3, 3, 15, 25, 0}, 20, 25, 34, 20, drops_0, 3, 3, 15, 25, 0},


{PITCHdrop, 40, 2, PITCHdrop, 42,25, // exclamation
{PITCHdrop, 38, 1, PITCHdrop, 42,25, // exclamation
20, 25, 34, 22, drops_0, 3, 3, 12, 8, 0}, 20, 25, 34, 22, drops_0, 3, 3, 12, 8, 0},





+ 5
- 2
src/readclause.cpp View File

ssml_sp->voice_variant = 0; ssml_sp->voice_variant = 0;
ssml_sp->voice_gender = 0; ssml_sp->voice_gender = 0;
ssml_sp->voice_age = 0; ssml_sp->voice_age = 0;
strncpy0(ssml_sp->voice_name,pvoice->name,sizeof(ssml_sp->voice_name));
strncpy0(ssml_sp->language,&pvoice->languages[1],sizeof(ssml_sp->language));
if(pvoice != NULL)
{
strncpy0(ssml_sp->voice_name,pvoice->name,sizeof(ssml_sp->voice_name));
strncpy0(ssml_sp->language,&pvoice->languages[1],sizeof(ssml_sp->language));
}
current_voice_id[0] = 0; current_voice_id[0] = 0;


n_param_stack = 1; n_param_stack = 1;

+ 6
- 2
src/speak_lib.cpp View File

buf_length = 200; buf_length = 200;
outbuf_size = (buf_length * samplerate)/500; outbuf_size = (buf_length * samplerate)/500;
outbuf = (unsigned char*)realloc(outbuf,outbuf_size); outbuf = (unsigned char*)realloc(outbuf,outbuf_size);
out_start = outbuf;
if((out_start = outbuf) == NULL)
return(EE_INTERNAL_ERROR);


// allocate space for event list. Allow 500 events per minute // allocate space for event list. Allow 500 events per minute
n_event_list = (buf_length*500)/1000; n_event_list = (buf_length*500)/1000;
event_list = (espeak_EVENT *)realloc(event_list,sizeof(espeak_EVENT) * n_event_list);
if((event_list = (espeak_EVENT *)realloc(event_list,sizeof(espeak_EVENT) * n_event_list)) == NULL)
return(EE_INTERNAL_ERROR);


option_phonemes = 0; option_phonemes = 0;




#endif #endif
Free(event_list); Free(event_list);
event_list = NULL;
Free(outbuf); Free(outbuf);
outbuf = NULL;
FreePhData(); FreePhData();


return EE_OK; return EE_OK;

+ 1
- 1
src/speak_lib.h View File



path: The directory which contains the espeak-data directory, or NULL for the default location. path: The directory which contains the espeak-data directory, or NULL for the default location.


Returns: sample rate in Hz
Returns: sample rate in Hz, or -1 (EE_INTERNAL_ERROR).
*/ */


typedef int (t_espeak_callback)(short*, int, espeak_EVENT*); typedef int (t_espeak_callback)(short*, int, espeak_EVENT*);

+ 1234
- 0
src/speak_riscos.cpp
File diff suppressed because it is too large
View File


+ 1
- 1
src/synthdata.cpp View File

#include "translate.h" #include "translate.h"
#include "wave.h" #include "wave.h"


const char *version_string = "1.24.03 06.May.07";
const char *version_string = "1.24.04 08.May.07";
const int version_phdata = 0x012201; const int version_phdata = 0x012201;


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

+ 2
- 2
src/tr_languages.cpp View File



case L('f','r'): // french case L('f','r'): // french
{ {
static int stress_lengths_fr[8] = {180, 180, 180, 180, 0, 0, 220, 220};
static int stress_lengths_fr[8] = {180, 160, 180, 190, 0, 0, 220, 220};
static int stress_amps_fr[8] = {16,14, 20,20, 20,24, 24,22 }; static int stress_amps_fr[8] = {16,14, 20,20, 20,24, 24,22 };


tr = new Translator(); tr = new Translator();
SetupTranslator(tr,stress_lengths_fr,stress_amps_fr); SetupTranslator(tr,stress_lengths_fr,stress_amps_fr);
tr->langopts.stress_rule = 3; // stress on final syllable tr->langopts.stress_rule = 3; // stress on final syllable
tr->langopts.stress_flags = 0x20; // don't use secondary stress
tr->langopts.stress_flags = 0x0024; // don't use secondary stress
tr->langopts.param[LOPT_IT_LENGTHEN] = 1; // remove lengthen indicator from unstressed syllables tr->langopts.param[LOPT_IT_LENGTHEN] = 1; // remove lengthen indicator from unstressed syllables


tr->langopts.numbers = 0x1509; tr->langopts.numbers = 0x1509;

+ 1
- 1
src/translate.h View File

// bit6=light syllable followed by heavy, move secondary stress to the heavy syllable. LANG=Finnish // bit6=light syllable followed by heavy, move secondary stress to the heavy syllable. LANG=Finnish
// bit8=stress last syllable if it doesn't end in a vowel // bit8=stress last syllable if it doesn't end in a vowel
// bit9=stress last syllable if it doesn't end in vowel or "s" or "n" LANG=Spanish // bit9=stress last syllable if it doesn't end in vowel or "s" or "n" LANG=Spanish
// bit12= In 2-syllable words, give the first syllable a secondary stress
// bit12= If there is only one syllable before the primary stress, give it a secondary stress


int stress_flags; int stress_flags;
int unstressed_wd1; // stress for $u word of 1 syllable int unstressed_wd1; // stress for $u word of 1 syllable

+ 10
- 6
src/voices.cpp View File

{"female", 2}, {"female", 2},
{NULL, 0 }}; {NULL, 0 }};


//int tone_points[10] = {250,140, 1200,110, -1,0, -1,0, -1,0};
int tone_points[10] = {600,180, 1200,140, 2000,110, 3000,110, -1,0};

// limit the rate of change for each formant number // limit the rate of change for each formant number
//static int formant_rate_22050[9] = {50, 104, 165, 230, 220, 220, 220, 220, 220}; // values for 22kHz sample rate //static int formant_rate_22050[9] = {50, 104, 165, 230, 220, 220, 220, 220, 220}; // values for 22kHz sample rate
static int formant_rate_22050[9] = {50, 100, 165, 200, 200, 200, 200, 200, 200}; // values for 22kHz sample rate static int formant_rate_22050[9] = {50, 100, 165, 200, 200, 200, 200, 200, 200}; // values for 22kHz sample rate
const char *variant_lists[3] = {variants_either, variants_male, variants_female}; const char *variant_lists[3] = {variants_either, variants_male, variants_female};




int tone_points[10] = {250,140, 1200,110, -1,0, -1,0, -1,0};


void SetToneAdjust(voice_t *voice, int *tone_pts) void SetToneAdjust(voice_t *voice, int *tone_pts)
{//============================================== {//==============================================
} }


f_voice = fopen(buf,"r"); f_voice = fopen(buf,"r");
if(first_voice == NULL)
{
first_voice = ReadVoiceFile(f_voice,buf+len_path_voices,voicename);
rewind(f_voice);
}


language_type = "en"; // default language_type = "en"; // default
if(f_voice == NULL) if(f_voice == NULL)
language_type = voicename; language_type = voicename;
} }


if(first_voice == NULL)
{
first_voice = ReadVoiceFile(f_voice,buf+strlen(path_voices),voicename);
rewind(f_voice);
}


if(!tone_only && (translator != NULL)) if(!tone_only && (translator != NULL))
{ {
delete translator; delete translator;

Loading…
Cancel
Save