| @@ -16,6 +16,10 @@ The espeak-ng project is a fork of the espeak project. | |||
| * New Language option: "lowercaseSentence" for ending a sentence if a period is followed by a lower case letter. | |||
| * Added voice variants | |||
| bug fixes: | |||
| * Fix reading malformed SSML (Christopher Brannon) | |||
| * Fix memory allocation (Christopher Brannon) | |||
| documentation: | |||
| * Add documentation about voice and language options. | |||
| * Add documentation about dictionary flags. | |||
| @@ -510,10 +510,13 @@ int ReadClause(Translator *tr, char *buf, short *charix, int *charix_top, int n_ | |||
| tr->clause_lower_count = 0; | |||
| *tone_type = 0; | |||
| if (ungot_char2 != 0) | |||
| if (ungot_char2 != 0) { | |||
| c2 = ungot_char2; | |||
| else | |||
| } else if (Eof()) { | |||
| c2 = 0; | |||
| } else { | |||
| c2 = GetC(); | |||
| } | |||
| while (!Eof() || (ungot_char != 0) || (ungot_char2 != 0) || (ungot_string_ix >= 0)) { | |||
| if (!iswalnum(c1)) { | |||
| @@ -542,14 +545,14 @@ int ReadClause(Translator *tr, char *buf, short *charix, int *charix_top, int n_ | |||
| if ((ungot_string_ix == 0) && (ungot_char2 == 0)) | |||
| c1 = ungot_string[ungot_string_ix++]; | |||
| if (ungot_string_ix >= 0) | |||
| if (ungot_string_ix >= 0) { | |||
| c2 = ungot_string[ungot_string_ix++]; | |||
| else { | |||
| } else if (Eof()) { | |||
| c2 = ' '; | |||
| } else { | |||
| c2 = GetC(); | |||
| if (Eof()) | |||
| c2 = ' '; | |||
| } | |||
| ungot_char2 = 0; | |||
| if ((option_ssml) && (phoneme_mode == 0)) { | |||
| @@ -561,7 +564,11 @@ int ReadClause(Translator *tr, char *buf, short *charix, int *charix_top, int n_ | |||
| c1 = GetC(); | |||
| } | |||
| xml_buf2[n_xml_buf] = 0; | |||
| c2 = GetC(); | |||
| if (Eof()) { | |||
| c2 = '\0'; | |||
| } else { | |||
| c2 = GetC(); | |||
| } | |||
| sprintf(ungot_string, "%s%c%c", &xml_buf2[0], c1, c2); | |||
| int found = -1; | |||
| @@ -280,7 +280,9 @@ ESPEAK_NG_API espeak_ng_STATUS espeak_ng_InitializeOutput(espeak_ng_OUTPUT_MODE | |||
| buffer_length = min_buffer_length; | |||
| // allocate 2 bytes per sample | |||
| outbuf_size = (buffer_length * samplerate)/500; | |||
| // Always round up to the nearest sample and the nearest byte. | |||
| int millisamples = buffer_length * samplerate; | |||
| outbuf_size = (millisamples + 1000 - millisamples % 1000) / 500; | |||
| out_start = (unsigned char *)realloc(outbuf, outbuf_size); | |||
| if (out_start == NULL) | |||
| return ENOMEM; | |||
| @@ -0,0 +1 @@ | |||
| kəmpˈa͡ɪl ænd flˈæʃ lˈɪnɪɪd͡ʒ ˈændɹɔ͡ɪd ˌo͡ʊˈɛs | |||
| @@ -0,0 +1 @@ | |||
| compile&flash Lineage Android OS | |||
| @@ -0,0 +1 @@ | |||
| kəmpˈa͡ɪl ænd flˈæʃ | |||
| @@ -0,0 +1 @@ | |||
| compile&flash | |||