all-local: \ | all-local: \ | ||||
espeak-ng-data/phontab \ | espeak-ng-data/phontab \ | ||||
dictionaries \ | |||||
mbrola | |||||
dictionaries | |||||
uninstall-hook: | uninstall-hook: | ||||
rm -rf $(DESTDIR)$(DATADIR) | rm -rf $(DESTDIR)$(DATADIR) | ||||
src/libespeak-ng/common.c \ | src/libespeak-ng/common.c \ | ||||
src/libespeak-ng/compiledata.c \ | src/libespeak-ng/compiledata.c \ | ||||
src/libespeak-ng/compiledict.c \ | src/libespeak-ng/compiledict.c \ | ||||
src/libespeak-ng/compilembrola.c \ | |||||
src/libespeak-ng/dictionary.c \ | src/libespeak-ng/dictionary.c \ | ||||
src/libespeak-ng/encoding.c \ | src/libespeak-ng/encoding.c \ | ||||
src/libespeak-ng/error.c \ | src/libespeak-ng/error.c \ | ||||
src/libespeak-ng/ssml.c \ | src/libespeak-ng/ssml.c \ | ||||
src/libespeak-ng/synthdata.c \ | src/libespeak-ng/synthdata.c \ | ||||
src/libespeak-ng/synthesize.c \ | src/libespeak-ng/synthesize.c \ | ||||
src/libespeak-ng/synth_mbrola.c \ | |||||
src/libespeak-ng/translate.c \ | src/libespeak-ng/translate.c \ | ||||
src/libespeak-ng/translateword.c \ | src/libespeak-ng/translateword.c \ | ||||
src/libespeak-ng/tr_languages.c \ | src/libespeak-ng/tr_languages.c \ | ||||
if OPT_MBROLA | if OPT_MBROLA | ||||
AM_CFLAGS += -DUSE_MBROLA=1 | 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 | endif | ||||
if OPT_ASYNC | if OPT_ASYNC | ||||
##### mbrola: | ##### mbrola: | ||||
if OPT_MBROLA | |||||
PHSOURCE_MBROLA = \ | PHSOURCE_MBROLA = \ | ||||
$(wildcard phsource/mbrola/*) | $(wildcard phsource/mbrola/*) | ||||
ESPEAK_DATA_PATH=$(CURDIR) src/espeak-ng --compile-mbrola=phsource/mbrola/$* | ESPEAK_DATA_PATH=$(CURDIR) src/espeak-ng --compile-mbrola=phsource/mbrola/$* | ||||
EXTRA_DIST += $(PHSOURCE_MBROLA) | EXTRA_DIST += $(PHSOURCE_MBROLA) | ||||
all-local: mbrola | |||||
endif |
"\t Compile pronunciation rules and dictionary from the current\n" | "\t Compile pronunciation rules and dictionary from the current\n" | ||||
"\t directory, including line numbers for use with -X.\n" | "\t directory, including line numbers for use with -X.\n" | ||||
"\t <voice name> specifies the language\n" | "\t <voice name> specifies the language\n" | ||||
#if USE_MBROLA | |||||
"--compile-mbrola=<voice name>\n" | "--compile-mbrola=<voice name>\n" | ||||
"\t Compile an MBROLA voice\n" | "\t Compile an MBROLA voice\n" | ||||
#endif | |||||
"--compile-intonations\n" | "--compile-intonations\n" | ||||
"\t Compile the intonation data\n" | "\t Compile the intonation data\n" | ||||
"--compile-phonemes=<phsource-dir>\n" | "--compile-phonemes=<phsource-dir>\n" | ||||
{ "version", no_argument, 0, 0x10b }, | { "version", no_argument, 0, 0x10b }, | ||||
{ "sep", optional_argument, 0, 0x10c }, | { "sep", optional_argument, 0, 0x10c }, | ||||
{ "tie", optional_argument, 0, 0x10d }, | { "tie", optional_argument, 0, 0x10d }, | ||||
#if USE_MBROLA | |||||
{ "compile-mbrola", optional_argument, 0, 0x10e }, | { "compile-mbrola", optional_argument, 0, 0x10e }, | ||||
#endif | |||||
{ "compile-intonations", no_argument, 0, 0x10f }, | { "compile-intonations", no_argument, 0, 0x10f }, | ||||
{ "compile-phonemes", optional_argument, 0, 0x110 }, | { "compile-phonemes", optional_argument, 0, 0x110 }, | ||||
{ "load", no_argument, 0, 0x111 }, | { "load", no_argument, 0, 0x111 }, | ||||
if (phonemes_separator == 'z') | if (phonemes_separator == 'z') | ||||
phonemes_separator = 0x200d; // ZWJ | phonemes_separator = 0x200d; // ZWJ | ||||
break; | break; | ||||
#if USE_MBROLA | |||||
case 0x10e: // --compile-mbrola | case 0x10e: // --compile-mbrola | ||||
{ | { | ||||
espeak_ng_InitializePath(data_path); | espeak_ng_InitializePath(data_path); | ||||
} | } | ||||
return EXIT_SUCCESS; | return EXIT_SUCCESS; | ||||
} | } | ||||
#endif | |||||
case 0x10f: // --compile-intonations | case 0x10f: // --compile-intonations | ||||
{ | { | ||||
espeak_ng_InitializePath(data_path); | espeak_ng_InitializePath(data_path); |
ep->text_position = char_position & 0xffffff; | ep->text_position = char_position & 0xffffff; | ||||
ep->length = char_position >> 24; | 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; | time = ((double)(count_samples + mbrola_delay + (out_ptr - out_start)/2)*1000.0)/samplerate; | ||||
ep->audio_position = (int)time; | ep->audio_position = (int)time; | ||||
ep->sample = (count_samples + mbrola_delay + (out_ptr - out_start)/2); | ep->sample = (count_samples + mbrola_delay + (out_ptr - out_start)/2); |
{ | { | ||||
case 1: // PreVoicing | case 1: // PreVoicing | ||||
return control & 1; | return control & 1; | ||||
#if USE_KLATT | |||||
case 2: // KlattSynth | case 2: // KlattSynth | ||||
return voice->klattv[0] != 0; | return voice->klattv[0] != 0; | ||||
#endif | |||||
#if USE_MBROLA | |||||
case 3: // MbrolaSynth | case 3: // MbrolaSynth | ||||
return mbrola_name[0] != 0; | return mbrola_name[0] != 0; | ||||
#endif | |||||
} | } | ||||
} | } | ||||
return false; | return false; |
if (option_phoneme_events & espeakINITIALIZE_PHONEME_IPA) | if (option_phoneme_events & espeakINITIALIZE_PHONEME_IPA) | ||||
use_ipa = 1; | use_ipa = 1; | ||||
#if USE_MBROLA | |||||
if (mbrola_name[0] != 0) | if (mbrola_name[0] != 0) | ||||
return MbrolaGenerate(phoneme_list, n_ph, resume); | return MbrolaGenerate(phoneme_list, n_ph, resume); | ||||
#endif | |||||
if (resume == false) { | if (resume == false) { | ||||
ix = 1; | ix = 1; |
if (tone_only == 0) { | if (tone_only == 0) { | ||||
n_replace_phonemes = 0; | n_replace_phonemes = 0; | ||||
#if USE_MBROLA | |||||
LoadMbrolaTable(NULL, NULL, 0); | LoadMbrolaTable(NULL, NULL, 0); | ||||
#endif | |||||
} | } | ||||
// probably unnecessary, but removing this would break tests | // probably unnecessary, but removing this would break tests | ||||
sscanf(p, "%d", &voice->speed_percent); | sscanf(p, "%d", &voice->speed_percent); | ||||
SetSpeed(3); | SetSpeed(3); | ||||
break; | break; | ||||
#if USE_MBROLA | |||||
case V_MBROLA: | case V_MBROLA: | ||||
{ | { | ||||
int srate = 16000; | int srate = 16000; | ||||
voice->samplerate = srate; | voice->samplerate = srate; | ||||
} | } | ||||
break; | break; | ||||
#endif | |||||
#if USE_KLATT | |||||
case V_KLATT: | case V_KLATT: | ||||
voice->klattv[0] = 1; // default source: IMPULSIVE | voice->klattv[0] = 1; // default source: IMPULSIVE | ||||
Read8Numbers(p, voice->klattv); | Read8Numbers(p, voice->klattv); | ||||
voice->klattv[KLATT_Kopen] -= 40; | voice->klattv[KLATT_Kopen] -= 40; | ||||
break; | break; | ||||
#endif | |||||
case V_FAST: | case V_FAST: | ||||
sscanf(p, "%d", &speed.fast_settings); | sscanf(p, "%d", &speed.fast_settings); | ||||
SetSpeed(3); | SetSpeed(3); |
} | } | ||||
#endif | #endif | ||||
#if USE_MBROLA | |||||
if (mbrola_name[0] != 0) | if (mbrola_name[0] != 0) | ||||
MbrolaReset(); | MbrolaReset(); | ||||
#endif | |||||
} | } | ||||
int WcmdqFree() | int WcmdqFree() |