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] s.V //?? or retroflex [S]
ष (B S //?? ष (B s. //??
?1 ष (_ 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 _) ж (_ z.E
ж (кY S ж (кY s.
ж (кь S ж (кь s.
ж (пY S ж (пY s.
ж (пь S ж (пь s.
ж (сь S ж (сь s.
ж (сY S ж (сY s.
ж (ть S ж (ть s.
ж (тY S ж (тY s.
ж (фь S ж (фь s.
ж (фY S ж (фY s.
ж (ффь S ж (ффь s.
ж (ффY S ж (ффY s.
ж (хь S ж (хь s.
ж (хY S ж (хY s.
ж (хкY S ж (хкY s.
ж (хкь S ж (хкь s.
ж z.
ж Z


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


з (ж Z з (ж z.
з (ш S з (ш 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 с (ж z.
с (ш S с (ш s.
с (щ s;s; с (щ s;
с (ч s;s; с (ч s;


с s с s




т (ж d т (ж d


т t т t


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




.group ш .group ш
_) ш (_ SA _) ш (_ s.A
ш (б Z ш (б z.
ш (бь Z ш (бь z.
ш (бY Z ш (бY z.
ш (бмь Z ш (бмь z.
ш (бмY Z ш (бмY z.
ш (бвь Z ш (бвь z.
ш (бвY Z ш (бвY z.
ш (г Z ш (г z.
ш (гь Z ш (гь z.
ш (гY Z ш (гY z.
ш (д Z ш (д z.
ш (дь Z ш (дь z.
ш (дY Z ш (дY z.
ш (дB Z ш (дB z.
ш (ж Z ш (ж z.
ш (з Z ш (з z.
ш (зь Z ш (зь z.
ш (зY 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 base 91 91
en 52 136 en 52 138
en_n 29 136 en_n 29 138
en_us 36 136 en_us 36 138
en_sc 39 138 en_sc 39 140
en_rp 34 136 en_rp 34 138
en_wm 30 136 en_wm 30 138
af 37 120 af 37 122
cy 30 115 cy 30 117
de 28 112 de 28 114
eo 15 101 eo 15 103
fi 40 120 fi 40 122
fr 32 113 fr 32 115
fr_ca 11 113 fr_ca 11 115
hi 50 125 hi 50 127
hu 24 106 hu 24 108
nl 25 109 nl 25 111
pl 17 100 pl 17 102
sk 22 115 sk 22 117
cs 6 116 cs 6 118
hr 15 119 hr 15 121
ru 35 116 ru 36 119
it 28 109 it 28 111
es 7 109 es 7 111
pt 25 124 pt 25 126
pt_pt 17 124 pt_pt 17 126
ro 36 133 ro 36 135
el 7 109 el 7 111
sv 25 111 sv 25 113
no 29 115 no 29 117
vi 41 126 vi 41 128
zh_yue 32 117 zh_yue 32 119
sw 14 98 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_n en
1 vnasal/aa_n3 af 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 3 voc/zh base ro
2 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 2 vowel/o_4 en_n fr
1 vowel/o_6 nl 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 formants voc/z_pzd+ufric/s_pzd%80
before _ voc/z_pzd_+ufric/s_pzd%40 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 wave ufric/s_pzd
before _ ufric/s_pzd%50 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)); if(pvoice != NULL)
strncpy0(ssml_sp->language,&pvoice->languages[1],sizeof(ssml_sp->language)); {
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