* New Language option: "lowercaseSentence" for ending a sentence if a period is followed by a lower case letter. | * New Language option: "lowercaseSentence" for ending a sentence if a period is followed by a lower case letter. | ||||
* Added voice variants | * Added voice variants | ||||
bug fixes: | |||||
* Fix reading malformed SSML (Christopher Brannon) | |||||
* Fix memory allocation (Christopher Brannon) | |||||
documentation: | documentation: | ||||
* Add documentation about voice and language options. | * Add documentation about voice and language options. | ||||
* Add documentation about dictionary flags. | * Add documentation about dictionary flags. |
tr->clause_lower_count = 0; | tr->clause_lower_count = 0; | ||||
*tone_type = 0; | *tone_type = 0; | ||||
if (ungot_char2 != 0) | |||||
if (ungot_char2 != 0) { | |||||
c2 = ungot_char2; | c2 = ungot_char2; | ||||
else | |||||
} else if (Eof()) { | |||||
c2 = 0; | |||||
} else { | |||||
c2 = GetC(); | c2 = GetC(); | ||||
} | |||||
while (!Eof() || (ungot_char != 0) || (ungot_char2 != 0) || (ungot_string_ix >= 0)) { | while (!Eof() || (ungot_char != 0) || (ungot_char2 != 0) || (ungot_string_ix >= 0)) { | ||||
if (!iswalnum(c1)) { | if (!iswalnum(c1)) { | ||||
if ((ungot_string_ix == 0) && (ungot_char2 == 0)) | if ((ungot_string_ix == 0) && (ungot_char2 == 0)) | ||||
c1 = ungot_string[ungot_string_ix++]; | c1 = ungot_string[ungot_string_ix++]; | ||||
if (ungot_string_ix >= 0) | |||||
if (ungot_string_ix >= 0) { | |||||
c2 = ungot_string[ungot_string_ix++]; | c2 = ungot_string[ungot_string_ix++]; | ||||
else { | |||||
} else if (Eof()) { | |||||
c2 = ' '; | |||||
} else { | |||||
c2 = GetC(); | c2 = GetC(); | ||||
if (Eof()) | |||||
c2 = ' '; | |||||
} | } | ||||
ungot_char2 = 0; | ungot_char2 = 0; | ||||
if ((option_ssml) && (phoneme_mode == 0)) { | if ((option_ssml) && (phoneme_mode == 0)) { | ||||
c1 = GetC(); | c1 = GetC(); | ||||
} | } | ||||
xml_buf2[n_xml_buf] = 0; | 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); | sprintf(ungot_string, "%s%c%c", &xml_buf2[0], c1, c2); | ||||
int found = -1; | int found = -1; |
buffer_length = min_buffer_length; | buffer_length = min_buffer_length; | ||||
// allocate 2 bytes per sample | // 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); | out_start = (unsigned char *)realloc(outbuf, outbuf_size); | ||||
if (out_start == NULL) | if (out_start == NULL) | ||||
return ENOMEM; | return ENOMEM; |
kəmpˈa͡ɪl ænd flˈæʃ lˈɪnɪɪd͡ʒ ˈændɹɔ͡ɪd ˌo͡ʊˈɛs |
compile&flash Lineage Android OS |
kəmpˈa͡ɪl ænd flˈæʃ |
compile&flash |