| @@ -50,8 +50,7 @@ EXTRA_DIST += ChangeLog | |||
| all-local: \ | |||
| espeak-ng-data/phontab \ | |||
| dictionaries \ | |||
| mbrola | |||
| dictionaries | |||
| uninstall-hook: | |||
| rm -rf $(DESTDIR)$(DATADIR) | |||
| @@ -158,7 +157,6 @@ src_libespeak_ng_la_SOURCES = \ | |||
| src/libespeak-ng/common.c \ | |||
| src/libespeak-ng/compiledata.c \ | |||
| src/libespeak-ng/compiledict.c \ | |||
| src/libespeak-ng/compilembrola.c \ | |||
| src/libespeak-ng/dictionary.c \ | |||
| src/libespeak-ng/encoding.c \ | |||
| src/libespeak-ng/error.c \ | |||
| @@ -178,7 +176,6 @@ src_libespeak_ng_la_SOURCES = \ | |||
| src/libespeak-ng/ssml.c \ | |||
| src/libespeak-ng/synthdata.c \ | |||
| src/libespeak-ng/synthesize.c \ | |||
| src/libespeak-ng/synth_mbrola.c \ | |||
| src/libespeak-ng/translate.c \ | |||
| src/libespeak-ng/translateword.c \ | |||
| src/libespeak-ng/tr_languages.c \ | |||
| @@ -244,7 +241,10 @@ endif | |||
| if OPT_MBROLA | |||
| AM_CFLAGS += -DUSE_MBROLA=1 | |||
| src_libespeak_ng_la_SOURCES += src/libespeak-ng/mbrowrap.c | |||
| src_libespeak_ng_la_SOURCES += \ | |||
| src/libespeak-ng/mbrowrap.c \ | |||
| src/libespeak-ng/synth_mbrola.c \ | |||
| src/libespeak-ng/compilembrola.c | |||
| endif | |||
| if OPT_ASYNC | |||
| @@ -956,6 +956,8 @@ dictsource/yue_emoji: | |||
| ##### mbrola: | |||
| if OPT_MBROLA | |||
| PHSOURCE_MBROLA = \ | |||
| $(wildcard phsource/mbrola/*) | |||
| @@ -967,3 +969,7 @@ espeak-ng-data/mbrola_ph/%_phtrans: phsource/mbrola/% src/espeak-ng | |||
| ESPEAK_DATA_PATH=$(CURDIR) src/espeak-ng --compile-mbrola=phsource/mbrola/$* | |||
| EXTRA_DIST += $(PHSOURCE_MBROLA) | |||
| all-local: mbrola | |||
| endif | |||
| @@ -89,8 +89,10 @@ static const char *help_text = | |||
| "\t Compile pronunciation rules and dictionary from the current\n" | |||
| "\t directory, including line numbers for use with -X.\n" | |||
| "\t <voice name> specifies the language\n" | |||
| #if USE_MBROLA | |||
| "--compile-mbrola=<voice name>\n" | |||
| "\t Compile an MBROLA voice\n" | |||
| #endif | |||
| "--compile-intonations\n" | |||
| "\t Compile the intonation data\n" | |||
| "--compile-phonemes=<phsource-dir>\n" | |||
| @@ -323,7 +325,9 @@ int main(int argc, char **argv) | |||
| { "version", no_argument, 0, 0x10b }, | |||
| { "sep", optional_argument, 0, 0x10c }, | |||
| { "tie", optional_argument, 0, 0x10d }, | |||
| #if USE_MBROLA | |||
| { "compile-mbrola", optional_argument, 0, 0x10e }, | |||
| #endif | |||
| { "compile-intonations", no_argument, 0, 0x10f }, | |||
| { "compile-phonemes", optional_argument, 0, 0x110 }, | |||
| { "load", no_argument, 0, 0x111 }, | |||
| @@ -536,6 +540,7 @@ int main(int argc, char **argv) | |||
| if (phonemes_separator == 'z') | |||
| phonemes_separator = 0x200d; // ZWJ | |||
| break; | |||
| #if USE_MBROLA | |||
| case 0x10e: // --compile-mbrola | |||
| { | |||
| espeak_ng_InitializePath(data_path); | |||
| @@ -548,6 +553,7 @@ int main(int argc, char **argv) | |||
| } | |||
| return EXIT_SUCCESS; | |||
| } | |||
| #endif | |||
| case 0x10f: // --compile-intonations | |||
| { | |||
| espeak_ng_InitializePath(data_path); | |||
| @@ -523,6 +523,10 @@ void MarkerEvent(int type, unsigned int char_position, int value, int value2, un | |||
| ep->text_position = char_position & 0xffffff; | |||
| ep->length = char_position >> 24; | |||
| #if !USE_MBROLA | |||
| static const int mbrola_delay = 0; | |||
| #endif | |||
| time = ((double)(count_samples + mbrola_delay + (out_ptr - out_start)/2)*1000.0)/samplerate; | |||
| ep->audio_position = (int)time; | |||
| ep->sample = (count_samples + mbrola_delay + (out_ptr - out_start)/2); | |||
| @@ -639,10 +639,14 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, | |||
| { | |||
| case 1: // PreVoicing | |||
| return control & 1; | |||
| #if USE_KLATT | |||
| case 2: // KlattSynth | |||
| return voice->klattv[0] != 0; | |||
| #endif | |||
| #if USE_MBROLA | |||
| case 3: // MbrolaSynth | |||
| return mbrola_name[0] != 0; | |||
| #endif | |||
| } | |||
| } | |||
| return false; | |||
| @@ -1148,8 +1148,10 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, bool resume) | |||
| if (option_phoneme_events & espeakINITIALIZE_PHONEME_IPA) | |||
| use_ipa = 1; | |||
| #if USE_MBROLA | |||
| if (mbrola_name[0] != 0) | |||
| return MbrolaGenerate(phoneme_list, n_ph, resume); | |||
| #endif | |||
| if (resume == false) { | |||
| ix = 1; | |||
| @@ -305,7 +305,9 @@ void VoiceReset(int tone_only) | |||
| if (tone_only == 0) { | |||
| n_replace_phonemes = 0; | |||
| #if USE_MBROLA | |||
| LoadMbrolaTable(NULL, NULL, 0); | |||
| #endif | |||
| } | |||
| // probably unnecessary, but removing this would break tests | |||
| @@ -649,6 +651,7 @@ voice_t *LoadVoice(const char *vname, int control) | |||
| sscanf(p, "%d", &voice->speed_percent); | |||
| SetSpeed(3); | |||
| break; | |||
| #if USE_MBROLA | |||
| case V_MBROLA: | |||
| { | |||
| int srate = 16000; | |||
| @@ -665,11 +668,14 @@ voice_t *LoadVoice(const char *vname, int control) | |||
| voice->samplerate = srate; | |||
| } | |||
| break; | |||
| #endif | |||
| #if USE_KLATT | |||
| case V_KLATT: | |||
| voice->klattv[0] = 1; // default source: IMPULSIVE | |||
| Read8Numbers(p, voice->klattv); | |||
| voice->klattv[KLATT_Kopen] -= 40; | |||
| break; | |||
| #endif | |||
| case V_FAST: | |||
| sscanf(p, "%d", &speed.fast_settings); | |||
| SetSpeed(3); | |||
| @@ -246,8 +246,10 @@ void WcmdqStop() | |||
| } | |||
| #endif | |||
| #if USE_MBROLA | |||
| if (mbrola_name[0] != 0) | |||
| MbrolaReset(); | |||
| #endif | |||
| } | |||
| int WcmdqFree() | |||