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-fd96e6ae7743master
| @@ -156,7 +156,7 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ? | |||
| ऱ r@ | |||
| व v@ | |||
| श S@ | |||
| ष S@ // should be retroflex [S] | |||
| ष s.@ // should be retroflex [S] | |||
| स s@ | |||
| ह H@ | |||
| क़ q@ | |||
| @@ -347,9 +347,9 @@ | |||
| ?1 श (_ S | |||
| .group ष | |||
| ष SV //?? or retroflex [S] | |||
| ष (B S //?? | |||
| ?1 ष (_ S //?? | |||
| ष s.V //?? or retroflex [S] | |||
| ष (B s. //?? | |||
| ?1 ष (_ s. //?? | |||
| .group स | |||
| स sV | |||
| @@ -18,7 +18,7 @@ _2 dv'A | |||
| _3 t;r'i | |||
| _4 ts;It'yr;I | |||
| _5 p;'jat; | |||
| _6 S'Es;t; | |||
| _6 s.'Es;t; | |||
| _7 s;'em | |||
| _8 v'os;E2m | |||
| _9 d;'ev;It; | |||
| @@ -28,7 +28,7 @@ _12 dv;In'AttsVt; | |||
| _13 tr;In'AttsVt; | |||
| _14 ts;It'y@-*nVttsVt; | |||
| _15 p;Itn'AttsVt; | |||
| _16 SE#stn'AttsVt; | |||
| _16 s.E#stn'AttsVt; | |||
| _17 s;Imn'AttsVt; | |||
| _18 vOs;Imn'AttsVt; | |||
| _19 d;E2v;Itn'AttsVt; | |||
| @@ -36,7 +36,7 @@ _2X dv'AttsVt; | |||
| _3X tr;'ittsVt; | |||
| _4X s'o@-*Ok | |||
| _5X p;Id;d;Is;'jat | |||
| _6X SE2z;d;d;Is;'jat | |||
| _6X s.E2z;d;d;Is;'jat | |||
| _7X s;'emd;E2s;It | |||
| _8X v'os;E2md;E2s;It | |||
| _9X d;E2v;In'ostO | |||
| @@ -45,7 +45,7 @@ _2C dv;'es;t;I | |||
| _3C tr;'ista | |||
| _4C ts;It'yr;E2sta | |||
| _5C p;,It;s'ot | |||
| _6C S,E#s;t;s'ot | |||
| _6C s.,E#s;t;s'ot | |||
| _7C s;,Ims'ot | |||
| _8C vOs;Ims'ot | |||
| _9C d;E2v;It;s'ot | |||
| @@ -82,7 +82,7 @@ _dpt2 _d;Is;'atYx // end of decimal fraction | |||
| // questions | |||
| что Sto $u $pause // what, that | |||
| что s.to $u $pause // what, that | |||
| // misc. | |||
| @@ -177,25 +177,25 @@ | |||
| .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 з | |||
| _) з (_ zE | |||
| @@ -243,8 +243,8 @@ | |||
| з (сь s; | |||
| з (сY s; | |||
| з (ж Z | |||
| з (ш S | |||
| з (ж z. | |||
| з (ш s. | |||
| з (щ s;s; | |||
| з (ч s;s; | |||
| з z | |||
| @@ -329,6 +329,10 @@ | |||
| .group о | |||
| о o | |||
| о (B oj | |||
| о (Cь oj | |||
| о (FY oj | |||
| .group п | |||
| _) п (_ pE | |||
| @@ -396,10 +400,10 @@ | |||
| с (дY z; | |||
| с (дB z; | |||
| с (ж Z | |||
| с (ш S | |||
| с (щ s;s; | |||
| с (ч s;s; | |||
| с (ж z. | |||
| с (ш s. | |||
| с (щ s; | |||
| с (ч s; | |||
| с s | |||
| @@ -430,7 +434,7 @@ | |||
| т (ж d | |||
| т t | |||
| т t | |||
| .group у | |||
| _) у (_ u | |||
| @@ -546,27 +550,27 @@ | |||
| .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 щ | |||
| _) щ (_ S;ja | |||
| @@ -243,11 +243,11 @@ espeak _^_EN | |||
| .group r | |||
| r r | |||
| r) r | |||
| rs S | |||
| rs s. | |||
| rsi (o rsx' | |||
| rsk Sk | |||
| rsk s.k | |||
| rsk (i rsx | |||
| rss S | |||
| rss s. | |||
| rg (_ rj | |||
| radera rad'e:ra | |||
| @@ -1,4 +1,4 @@ | |||
| .group a | |||
| a a: | |||
| ai a:I | |||
| @@ -387,7 +387,7 @@ | |||
| qu kw | |||
| .group r | |||
| r D | |||
| r z; | |||
| .group s | |||
| s s | |||
| @@ -1,38 +1,38 @@ | |||
| 33 phoneme tables | |||
| 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 | |||
| 2 b/b_ base hi | |||
| @@ -216,7 +216,9 @@ | |||
| 1 ufric/sh_ base | |||
| 2 ufric/sh_pzd base ro | |||
| 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/th base | |||
| 1 ufric/th_ base | |||
| @@ -343,8 +345,8 @@ | |||
| 1 vdiph/y#y fi | |||
| 2 vdiph/y#y_2 af zh_yue | |||
| 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 | |||
| 3 vnasal/ee_n2 hi pl pt_pt | |||
| 2 vnasal/e_n af pt | |||
| @@ -356,7 +358,8 @@ | |||
| 1 vnasal/oi_n pt | |||
| 2 vnasal/o_n hi pt | |||
| 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 | |||
| 1 vnasal/&u_n pt | |||
| 1 vnasal/u_n pt | |||
| @@ -375,18 +378,18 @@ | |||
| 1 vocw/Q2 nl | |||
| 6 vocw/v 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 | |||
| 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 | |||
| 2 voc/z_pzd base | |||
| 2 voc/z_pzd_ base | |||
| 14 vowel/@ base en en_us en_rp cy hi hr | |||
| 1 vowel/@- base | |||
| 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 | |||
| 5 vowel/0_3 en_us en_sc en_rp hu | |||
| 1 vowel/@_2 fr | |||
| @@ -402,7 +405,7 @@ | |||
| 5 vowel/a_2 eo it pt_pt ro vi | |||
| 3 vowel/a#_2 hr sv sw | |||
| 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 | |||
| 2 vowel/a_5 sv sw | |||
| 7 vowel/aa en_us fi fr_ca no zh_yue | |||
| @@ -445,13 +448,13 @@ | |||
| 2 vowel/ii_4 en_rp | |||
| 6 vowel/ii_en en en_n | |||
| 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 | |||
| 2 vowel/o-_2 en_n en_wm | |||
| 2 vowel/o_3 en_sc | |||
| 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 | |||
| 1 vowel/oe_2 no | |||
| 1 vowel/oe_4 sv | |||
| @@ -50,14 +50,14 @@ endphoneme | |||
| phoneme o | |||
| vowel starttype (o) endtype (o) | |||
| length 166 | |||
| formants vowel/o | |||
| formants vowel/o_4 | |||
| endphoneme | |||
| phoneme O | |||
| vowel starttype (o) endtype (o) | |||
| length 190 | |||
| formants vowel/0 | |||
| formants vowel/o_6 | |||
| endphoneme | |||
| @@ -102,7 +102,7 @@ endphoneme | |||
| phoneme A~ | |||
| vowel starttype (a) endtype (a) | |||
| length 222 | |||
| formants vnasal/aa_n | |||
| formants vnasal/aa_n3 | |||
| endphoneme | |||
| @@ -116,7 +116,7 @@ endphoneme | |||
| phoneme O~ | |||
| vowel starttype (o) endtype (o) | |||
| length 222 | |||
| formants vnasal/oo_n | |||
| formants vnasal/o_n3 | |||
| endphoneme | |||
| @@ -188,7 +188,6 @@ phoneme R | |||
| length 100 | |||
| lengthmod 7 | |||
| beforenotvowel r/ | |||
| trill | |||
| formants vwl_fr/@R+r3/rx%80 | |||
| endphoneme | |||
| @@ -240,7 +239,7 @@ endphoneme | |||
| phoneme z2 // silent unless followed by vowel | |||
| beforenotvowel NULL | |||
| vcd alv frc sibilant | |||
| vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 | |||
| vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 | |||
| formants voc/z+ufric/s_ | |||
| before _ voc/z_+ufric/s_ | |||
| lengthmod 6 | |||
| @@ -277,3 +276,4 @@ endphoneme | |||
| @@ -278,4 +278,10 @@ phoneme a | |||
| length 100 | |||
| endphoneme | |||
| phoneme a# | |||
| vowel starttype (a) endtype (a) | |||
| formants vowel/a#_3 | |||
| length 100 | |||
| endphoneme | |||
| @@ -774,12 +774,23 @@ phoneme Z | |||
| 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; | |||
| vcd pal frc sibilant palatal | |||
| vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 | |||
| 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 | |||
| switchvoicing s; | |||
| endphoneme | |||
| @@ -994,12 +1005,24 @@ phoneme s; | |||
| vowelout f1=1 f2=2700 400 600 f3=200 70 rate len=70 | |||
| length 100 | |||
| lengthmod 3 | |||
| wave ufric/s_pzd%50 | |||
| before _ ufric/s_pzd%50 | |||
| wave ufric/s_pzd | |||
| before _ ufric/s_pzd_ | |||
| switchvoicing z; | |||
| 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; | |||
| vls pal frc sibilant palatal | |||
| vowelin f1=1 f2=2700 400 600 f3=200 70 rate len=70 | |||
| @@ -1098,9 +1098,9 @@ void Translator::SetWordStress(char *output, unsigned int dictionary_flags, int | |||
| 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; | |||
| } | |||
| } | |||
| @@ -267,7 +267,7 @@ static TONE_TABLE tone_table[N_TONE_TABLE] = { | |||
| {PITCHfrise, 38,10, PITCHfrise2, 36,10, // comma, or question | |||
| 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}, | |||
| @@ -1841,8 +1841,11 @@ void InitText2(void) | |||
| ssml_sp->voice_variant = 0; | |||
| ssml_sp->voice_gender = 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; | |||
| n_param_stack = 1; | |||
| @@ -646,11 +646,13 @@ ESPEAK_API int espeak_Initialize(espeak_AUDIO_OUTPUT output_type, int buf_length | |||
| buf_length = 200; | |||
| outbuf_size = (buf_length * samplerate)/500; | |||
| 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 | |||
| 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; | |||
| @@ -1050,7 +1052,9 @@ ESPEAK_API espeak_ERROR espeak_Terminate(void) | |||
| #endif | |||
| Free(event_list); | |||
| event_list = NULL; | |||
| Free(outbuf); | |||
| outbuf = NULL; | |||
| FreePhData(); | |||
| return EE_OK; | |||
| @@ -145,7 +145,7 @@ int espeak_Initialize(espeak_AUDIO_OUTPUT output, int buflength, const char *pat | |||
| 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*); | |||
| @@ -35,7 +35,7 @@ | |||
| #include "translate.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; | |||
| int option_device_number = -1; | |||
| @@ -224,13 +224,13 @@ Translator *SelectTranslator(const char *name) | |||
| 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 }; | |||
| tr = new Translator(); | |||
| SetupTranslator(tr,stress_lengths_fr,stress_amps_fr); | |||
| 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.numbers = 0x1509; | |||
| @@ -254,7 +254,7 @@ typedef struct { | |||
| // 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 | |||
| // 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 unstressed_wd1; // stress for $u word of 1 syllable | |||
| @@ -47,6 +47,9 @@ MNEM_TAB genders [] = { | |||
| {"female", 2}, | |||
| {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 | |||
| //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 | |||
| @@ -155,7 +158,6 @@ const char variants_female[N_VOICE_VARIANTS] = {11,12,13,14,0}; | |||
| 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) | |||
| {//============================================== | |||
| @@ -544,11 +546,6 @@ voice_t *LoadVoice(char *vname, int control) | |||
| } | |||
| 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 | |||
| if(f_voice == NULL) | |||
| @@ -560,6 +557,13 @@ voice_t *LoadVoice(char *vname, int control) | |||
| 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)) | |||
| { | |||
| delete translator; | |||