mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-11-13 17:23:44 +00:00
+22
-21
@@ -132,16 +132,16 @@ static int attrnumber(const wchar_t *pw, int default_value, int type)
|
||||
static int attrcopy_utf8(char *buf, const wchar_t *pw, int len)
|
||||
{
|
||||
// Convert attribute string into utf8, write to buf, and return its utf8 length
|
||||
unsigned int c;
|
||||
int ix = 0;
|
||||
int n;
|
||||
int prev_c = 0;
|
||||
|
||||
if (pw != NULL) {
|
||||
unsigned int c;
|
||||
int prev_c = 0;
|
||||
while ((ix < (len-4)) && ((c = *pw++) != 0)) {
|
||||
if ((c == '"') && (prev_c != '\\'))
|
||||
break; // " indicates end of attribute, unless preceded by backstroke
|
||||
n = utf8_out(c, &buf[ix]);
|
||||
|
||||
int n = utf8_out(c, &buf[ix]);
|
||||
ix += n;
|
||||
prev_c = c;
|
||||
}
|
||||
@@ -208,12 +208,10 @@ static const char *VoiceFromStack(SSML_STACK *ssml_stack, int n_ssml_stack, espe
|
||||
const char *p;
|
||||
SSML_STACK *sp;
|
||||
const char *v_id;
|
||||
int voice_name_specified;
|
||||
int voice_found;
|
||||
espeak_VOICE voice_select;
|
||||
static char voice_name[40];
|
||||
char language[40];
|
||||
char buf[80];
|
||||
|
||||
MAKE_MEM_UNDEFINED(&voice_name, sizeof(voice_name));
|
||||
|
||||
@@ -226,7 +224,7 @@ static const char *VoiceFromStack(SSML_STACK *ssml_stack, int n_ssml_stack, espe
|
||||
|
||||
for (ix = 0; ix < n_ssml_stack; ix++) {
|
||||
sp = &ssml_stack[ix];
|
||||
voice_name_specified = 0;
|
||||
int voice_name_specified = 0;
|
||||
|
||||
if ((sp->voice_name[0] != 0) && (SelectVoiceByName(NULL, sp->voice_name) != NULL)) {
|
||||
voice_name_specified = 1;
|
||||
@@ -270,6 +268,7 @@ static const char *VoiceFromStack(SSML_STACK *ssml_stack, int n_ssml_stack, espe
|
||||
|
||||
if ((strchr(v_id, '+') == NULL) && ((voice_select.gender == ENGENDER_UNKNOWN) || (voice_select.gender == base_voice->gender)) && (base_voice_variant_name[0] != 0)) {
|
||||
// a voice variant has not been selected, use the original voice variant
|
||||
char buf[80];
|
||||
sprintf(buf, "%s+%s", v_id, base_voice_variant_name);
|
||||
strncpy0(voice_name, buf, sizeof(voice_name));
|
||||
return voice_name;
|
||||
@@ -318,12 +317,6 @@ static int GetVoiceAttributes(wchar_t *pw, int tag_type, SSML_STACK *ssml_sp, SS
|
||||
// a voice change.
|
||||
// Returns CLAUSE_TYPE_VOICE_CHANGE if there is a voice change
|
||||
|
||||
const wchar_t *lang;
|
||||
const wchar_t *gender;
|
||||
const wchar_t *name;
|
||||
const wchar_t *age;
|
||||
const wchar_t *variant;
|
||||
int value;
|
||||
const char *new_voice_id;
|
||||
|
||||
static const MNEM_TAB mnem_gender[] = {
|
||||
@@ -338,6 +331,12 @@ static int GetVoiceAttributes(wchar_t *pw, int tag_type, SSML_STACK *ssml_sp, SS
|
||||
if (n_ssml_stack > 1)
|
||||
n_ssml_stack--;
|
||||
} else {
|
||||
const wchar_t *lang;
|
||||
const wchar_t *gender;
|
||||
const wchar_t *name;
|
||||
const wchar_t *age;
|
||||
const wchar_t *variant;
|
||||
|
||||
// add a stack frame if any voice details are specified
|
||||
lang = GetSsmlAttribute(pw, "xml:lang");
|
||||
|
||||
@@ -359,6 +358,8 @@ static int GetVoiceAttributes(wchar_t *pw, int tag_type, SSML_STACK *ssml_sp, SS
|
||||
|
||||
ssml_sp = &ssml_stack[n_ssml_stack++];
|
||||
|
||||
int value;
|
||||
|
||||
attrcopy_utf8(ssml_sp->language, lang, sizeof(ssml_sp->language));
|
||||
attrcopy_utf8(ssml_sp->voice_name, name, sizeof(ssml_sp->voice_name));
|
||||
if ((value = attrnumber(variant, 1, 0)) > 0)
|
||||
@@ -384,7 +385,6 @@ static void ProcessParamStack(char *outbuf, int *outix, int n_param_stack, PARAM
|
||||
// Set the speech parameters from the parameter stack
|
||||
int param;
|
||||
int ix;
|
||||
int value;
|
||||
char buf[20];
|
||||
int new_parameters[N_SPEECH_PARAM];
|
||||
static const char cmd_letter[N_SPEECH_PARAM] = { 0, 'S', 'A', 'P', 'R', 0, 'C', 0, 0, 0, 0, 0, 'F' }; // embedded command letters
|
||||
@@ -400,6 +400,7 @@ static void ProcessParamStack(char *outbuf, int *outix, int n_param_stack, PARAM
|
||||
}
|
||||
|
||||
for (param = 0; param < N_SPEECH_PARAM; param++) {
|
||||
int value;
|
||||
if ((value = new_parameters[param]) != speech_parameters[param]) {
|
||||
buf[0] = 0;
|
||||
|
||||
@@ -471,14 +472,14 @@ static int ReplaceKeyName(char *outbuf, int index, int *outix)
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
int ix;
|
||||
int letter;
|
||||
char *p;
|
||||
|
||||
p = &outbuf[index];
|
||||
|
||||
if ((letter = LookupMnem(keynames, p)) != 0) {
|
||||
ix = utf8_out(letter, p);
|
||||
int ix;
|
||||
ix = utf8_out(letter, p);
|
||||
*outix = index + ix;
|
||||
return letter;
|
||||
}
|
||||
@@ -488,7 +489,7 @@ static int ReplaceKeyName(char *outbuf, int index, int *outix)
|
||||
static void SetProsodyParameter(int param_type, const wchar_t *attr1, PARAM_STACK *sp, PARAM_STACK *param_stack, int *speech_parameters)
|
||||
{
|
||||
int value;
|
||||
int sign;
|
||||
|
||||
|
||||
static const MNEM_TAB mnem_volume[] = {
|
||||
{ "default", 100 },
|
||||
@@ -539,7 +540,7 @@ static void SetProsodyParameter(int param_type, const wchar_t *attr1, PARAM_STAC
|
||||
// mnemonic specifies a value as a percentage of the base pitch/range/rate/volume
|
||||
sp->parameter[param_type] = (param_stack[0].parameter[param_type] * value)/100;
|
||||
} else {
|
||||
sign = attr_prosody_value(param_type, attr1, &value);
|
||||
int sign = attr_prosody_value(param_type, attr1, &value);
|
||||
|
||||
if (sign == 0)
|
||||
sp->parameter[param_type] = value; // absolute value in Hz
|
||||
@@ -560,7 +561,6 @@ int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int *outix, int n_outbuf, con
|
||||
|
||||
unsigned int ix;
|
||||
int index;
|
||||
int c;
|
||||
int tag_type;
|
||||
int value;
|
||||
int value2;
|
||||
@@ -571,7 +571,6 @@ int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int *outix, int n_outbuf, con
|
||||
const wchar_t *attr2;
|
||||
const wchar_t *attr3;
|
||||
int terminator;
|
||||
char *uri;
|
||||
int param_type;
|
||||
char tag_name[40];
|
||||
char buf[160];
|
||||
@@ -653,6 +652,7 @@ int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int *outix, int n_outbuf, con
|
||||
};
|
||||
|
||||
for (ix = 0; ix < (sizeof(tag_name)-1); ix++) {
|
||||
int c;
|
||||
if (((c = xml_buf[ix]) == 0) || iswspace(c))
|
||||
break;
|
||||
tag_name[ix] = tolower((char)c);
|
||||
@@ -815,11 +815,11 @@ int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int *outix, int n_outbuf, con
|
||||
sp = PushParamStack(tag_type, n_param_stack, (PARAM_STACK *)param_stack);
|
||||
|
||||
if ((attr1 = GetSsmlAttribute(px, "src")) != NULL) {
|
||||
char fname[256];
|
||||
attrcopy_utf8(buf, attr1, sizeof(buf));
|
||||
|
||||
if (uri_callback == NULL) {
|
||||
if ((xmlbase != NULL) && (buf[0] != '/')) {
|
||||
char fname[256];
|
||||
sprintf(fname, "%s/%s", xmlbase, buf);
|
||||
index = LoadSoundFile2(fname);
|
||||
} else
|
||||
@@ -832,6 +832,7 @@ int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int *outix, int n_outbuf, con
|
||||
}
|
||||
} else {
|
||||
if ((index = AddNameData(buf, 0)) >= 0) {
|
||||
char *uri;
|
||||
uri = &namedata[index];
|
||||
if (uri_callback(1, uri, xmlbase) == 0) {
|
||||
sprintf(buf, "%c%dU", CTRL_EMBEDDED, index);
|
||||
|
||||
Reference in New Issue
Block a user