| * 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 |