diff --git a/src/include/espeak-ng/espeak_ng.h b/src/include/espeak-ng/espeak_ng.h index 13d33504..f4eedd9c 100644 --- a/src/include/espeak-ng/espeak_ng.h +++ b/src/include/espeak-ng/espeak_ng.h @@ -67,6 +67,13 @@ typedef enum { ENOUTPUT_MODE_SPEAK_AUDIO = 0x0002, } espeak_ng_OUTPUT_MODE; +typedef enum { + ENGENDER_UNKNOWN = 0, + ENGENDER_MALE = 1, + ENGENDER_FEMALE = 2, + ENGENDER_NEUTRAL = 3, +} espeak_ng_VOICE_GENDER; + /* eSpeak NG 1.49.0 */ typedef struct espeak_ng_ERROR_CONTEXT_ *espeak_ng_ERROR_CONTEXT; diff --git a/src/libespeak-ng/readclause.c b/src/libespeak-ng/readclause.c index d6f87dbc..9ad2a7d2 100644 --- a/src/libespeak-ng/readclause.c +++ b/src/libespeak-ng/readclause.c @@ -1116,7 +1116,7 @@ static const char *VoiceFromStack() voice_name_specified = 1; strcpy(voice_name, sp->voice_name); language[0] = 0; - voice_select.gender = 0; + voice_select.gender = ENGENDER_UNKNOWN; voice_select.age = 0; voice_select.variant = 0; } @@ -1137,7 +1137,7 @@ static const char *VoiceFromStack() if (voice_name_specified == 0) voice_name[0] = 0; // forget a previous voice name if a language is specified } - if (sp->voice_gender != 0) + if (sp->voice_gender != ENGENDER_UNKNOWN) voice_select.gender = sp->voice_gender; if (sp->voice_age != 0) @@ -1152,7 +1152,7 @@ static const char *VoiceFromStack() if (v_id == NULL) return "default"; - if ((strchr(v_id, '+') == NULL) && ((voice_select.gender == 0) || (voice_select.gender == base_voice.gender)) && (base_voice_variant_name[0] != 0)) { + 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 sprintf(buf, "%s+%s", v_id, base_voice_variant_name); strncpy0(voice_name, buf, sizeof(voice_name)); @@ -1454,10 +1454,10 @@ static int GetVoiceAttributes(wchar_t *pw, int tag_type) SSML_STACK *ssml_sp; static const MNEM_TAB mnem_gender[] = { - { "male", 1 }, - { "female", 2 }, - { "neutral", 3 }, - { NULL, 0 } + { "male", ENGENDER_MALE }, + { "female", ENGENDER_FEMALE }, + { "neutral", ENGENDER_NEUTRAL }, + { NULL, ENGENDER_UNKNOWN } }; if (tag_type & SSML_CLOSE) { diff --git a/src/libespeak-ng/voices.c b/src/libespeak-ng/voices.c index 888e1b2b..1ddd4bbf 100644 --- a/src/libespeak-ng/voices.c +++ b/src/libespeak-ng/voices.c @@ -44,9 +44,9 @@ #include "translate.h" MNEM_TAB genders[] = { - { "male", 1 }, - { "female", 2 }, - { NULL, 0 } + { "male", ENGENDER_MALE }, + { "female", ENGENDER_FEMALE }, + { NULL, ENGENDER_UNKNOWN } }; int tone_points[12] = { 600, 170, 1200, 135, 2000, 110, 3000, 110, -1, 0 }; @@ -1098,15 +1098,15 @@ static int ScoreVoice(espeak_VOICE *voice_spec, const char *spec_language, int s score += 400; } - if (((voice_spec->gender == 1) || (voice_spec->gender == 2)) && - ((voice->gender == 1) || (voice->gender == 2))) { + if (((voice_spec->gender == ENGENDER_MALE) || (voice_spec->gender == ENGENDER_FEMALE)) && + ((voice->gender == ENGENDER_MALE) || (voice->gender == ENGENDER_FEMALE))) { if (voice_spec->gender == voice->gender) score += 50; else score -= 50; } - if ((voice_spec->age <= 12) && (voice->gender == 2) && (voice->age > 12)) + if ((voice_spec->age <= 12) && (voice->gender == ENGENDER_FEMALE) && (voice->age > 12)) score += 5; // give some preference for non-child female voice if a child is requested if (voice->age != 0) { @@ -1290,7 +1290,7 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found) if (vp != NULL) { voice_select2.languages = &(vp->languages[1]); - if ((voice_select2.gender == 0) && (voice_select2.age == 0) && (voice_select2.variant == 0)) { + if ((voice_select2.gender == ENGENDER_UNKNOWN) && (voice_select2.age == 0) && (voice_select2.variant == 0)) { if (variant_name[0] != 0) { sprintf(voice_id, "%s+%s", vp->identifier, variant_name); return voice_id; @@ -1312,10 +1312,10 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found) } gender = 0; - if ((voice_select2.gender == 2) || ((voice_select2.age > 0) && (voice_select2.age < 13))) - gender = 2; - else if (voice_select2.gender == 1) - gender = 1; + if ((voice_select2.gender == ENGENDER_FEMALE) || ((voice_select2.age > 0) && (voice_select2.age < 13))) + gender = ENGENDER_FEMALE; + else if (voice_select2.gender == ENGENDER_MALE) + gender = ENGENDER_MALE; #define AGE_OLD 60 if (voice_select2.age < AGE_OLD) @@ -1332,7 +1332,7 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found) // is the main voice the required gender? skip = 0; - if ((gender != 0) && (vp->gender != gender)) + if ((gender != ENGENDER_UNKNOWN) && (vp->gender != gender)) skip = 1; if ((ix2 == 0) && aged && (vp->age < AGE_OLD)) skip = 1;