extern int str_split(char *s, const char *delims, char *out[], int max) { return _str_split(s, delims, &out, max); }
int main(int argc, char **argv) { const char *voice_code, *text, *output_file_name, *mode; int sample_rate_ret, backwards; struct FRAGMENT_INFO fragment; float quit_after; struct FRAGMENT_INFO *fragments; char **texts; int i, n; size_t synthesized_ret; if (argc < 5) { _usage(argv[0]); return DRIVER_FAILURE; } voice_code = argv[1]; text = argv[2]; output_file_name = argv[3]; mode = argv[4]; if (strcmp(mode, "multi") == 0) { if (argc < 7) { _usage(argv[0]); return DRIVER_FAILURE; } quit_after = (float)atof(argv[5]); backwards = atoi(argv[6]); // split text into fragments n = 0; texts = _str_split((char *)text, '|', &n); // create fragments fragments = (struct FRAGMENT_INFO *)calloc(sizeof(fragment), n); for (i = 0; i < n; ++i) { fragments[i].voice_code = voice_code; fragments[i].text = texts[i]; } // synthesize if(_synthesize_multiple( output_file_name, &fragments, n, quit_after, backwards, &sample_rate_ret, &synthesized_ret ) != CEW_SUCCESS) { printf("Error while calling _synthesize_single()\n"); return DRIVER_FAILURE; } printf("Sample rate: %d\n", sample_rate_ret); printf("Synthesized: %lu\n", synthesized_ret); for (i = 0; i < synthesized_ret; ++i) { printf("%d %.3f %.3f\n", i, fragments[i].begin, fragments[i].end); } // deallocate for (i = 0; i < n; ++i) { free((void *)fragments[i].text); } free((void *)fragments); free((void *)texts); fragments = NULL; texts = NULL; } else { fragment.voice_code = voice_code; fragment.text = text; if (_synthesize_single(output_file_name, &sample_rate_ret, &fragment) != CEW_SUCCESS) { printf("Error while calling _synthesize_single()\n"); return DRIVER_FAILURE; } printf("Sample rate: %d\n", sample_rate_ret); printf("Begin: %.3f\n", fragment.begin); printf("End: %.3f\n", fragment.end); } return DRIVER_SUCCESS; }