Browse Source

Merge pull request #587

master
Valdis Vitolins 6 years ago
parent
commit
c38cb18de3

+ 12
- 2
src/espeak-ng.c View File

@@ -28,6 +28,7 @@
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>

#include <espeak-ng/espeak_ng.h>
@@ -113,6 +114,7 @@ static const char *help_text =
"--voices=<language>\n"
"\t List the available voices for the specified language.\n"
"\t If <language> is omitted, then list all voices.\n"
"--load Load voice from a file in current directory by name.\n"
"-h, --help Show this help.\n";

int samplerate;
@@ -321,6 +323,7 @@ int main(int argc, char **argv)
{ "compile-mbrola", optional_argument, 0, 0x10e },
{ "compile-intonations", no_argument, 0, 0x10f },
{ "compile-phonemes", optional_argument, 0, 0x110 },
{ "load", no_argument, 0, 0x111 },
{ 0, 0, 0, 0 }
};

@@ -336,6 +339,7 @@ int main(int argc, char **argv)
int value;
int flag_stdin = 0;
int flag_compile = 0;
int flag_load = 0;
int filesize = 0;
int synth_flags = espeakCHARS_AUTO | espeakPHONEMES | espeakENDPAUSE;

@@ -349,7 +353,7 @@ int main(int argc, char **argv)
int phoneme_options = 0;
int option_linelength = 0;
int option_waveout = 0;
espeak_VOICE voice_select;
char filename[200];
char voicename[40];
@@ -562,6 +566,9 @@ int main(int argc, char **argv)
}
return EXIT_SUCCESS;
}
case 0x111: // --load
flag_load = 1;
break;
default:
exit(0);
}
@@ -605,7 +612,10 @@ int main(int argc, char **argv)
if (voicename[0] == 0)
strcpy(voicename, ESPEAKNG_DEFAULT_VOICE);

result = espeak_ng_SetVoiceByName(voicename);
if(flag_load)
result = espeak_ng_SetVoiceByFile(voicename);
else
result = espeak_ng_SetVoiceByName(voicename);
if (result != ENS_OK) {
memset(&voice_select, 0, sizeof(voice_select));
voice_select.languages = voicename;

+ 3
- 0
src/include/espeak-ng/espeak_ng.h View File

@@ -119,6 +119,9 @@ espeak_ng_SetPunctuationList(const wchar_t *punctlist);
ESPEAK_NG_API espeak_ng_STATUS
espeak_ng_SetVoiceByName(const char *name);

ESPEAK_NG_API espeak_ng_STATUS
espeak_ng_SetVoiceByFile(const char *filename);

ESPEAK_NG_API espeak_ng_STATUS
espeak_ng_SetVoiceByProperties(espeak_VOICE *voice_selector);


+ 13
- 0
src/include/espeak-ng/speak_lib.h View File

@@ -606,6 +606,19 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec);
are listed, and they are listed in preference order.
*/

#ifdef __cplusplus
extern "C"
#endif
ESPEAK_API espeak_ERROR espeak_SetVoiceByFile(const char *filename);
/* Loads a voice given the file path. Language is not considered.
"filename" is a UTF8 string.

Return: EE_OK: operation achieved
EE_BUFFER_FULL: the command can not be buffered;
you may try after a while to call the function again.
EE_INTERNAL_ERROR.
*/

#ifdef __cplusplus
extern "C"
#endif

+ 5
- 0
src/libespeak-ng/espeak_api.c View File

@@ -128,6 +128,11 @@ ESPEAK_API espeak_ERROR espeak_SetVoiceByName(const char *name)
return status_to_espeak_error(espeak_ng_SetVoiceByName(name));
}

ESPEAK_API espeak_ERROR espeak_SetVoiceByFile(const char *filename)
{
return status_to_espeak_error(espeak_ng_SetVoiceByFile(filename));
}

ESPEAK_API espeak_ERROR espeak_SetVoiceByProperties(espeak_VOICE *voice_selector)
{
return status_to_espeak_error(espeak_ng_SetVoiceByProperties(voice_selector));

+ 39
- 0
src/libespeak-ng/voices.c View File

@@ -1466,6 +1466,45 @@ static void GetVoices(const char *path, int len_path_voices, int is_language_fil

#pragma GCC visibility push(default)


ESPEAK_NG_API espeak_ng_STATUS espeak_ng_SetVoiceByFile(const char *filename)
{
espeak_VOICE *v;
int ix;
espeak_VOICE voice_selector;
char *variant_name;
static char buf[60];

strncpy0(buf, filename, sizeof(buf));

variant_name = ExtractVoiceVariantName(buf, 0, 1);

for (ix = 0;; ix++) {
// convert voice name to lower case (ascii)
if ((buf[ix] = tolower(buf[ix])) == 0)
break;
}

memset(&voice_selector, 0, sizeof(voice_selector));
voice_selector.name = (char *)filename; // include variant name in voice stack ??

// first check for a voice with this filename
// This may avoid the need to call espeak_ListVoices().

if (LoadVoice(buf, 0x10) != NULL) {
if (variant_name[0] != 0)
LoadVoice(variant_name, 2);

DoVoiceChange(voice);
voice_selector.languages = voice->language_name;
SetVoiceStack(&voice_selector, variant_name);
return ENS_OK;
}

return ENS_VOICE_NOT_FOUND;
}


ESPEAK_NG_API espeak_ng_STATUS espeak_ng_SetVoiceByName(const char *name)
{
espeak_VOICE *v;

Loading…
Cancel
Save