Browse Source

Use enumeration constants for the voice gender field values.

master
Reece H. Dunn 8 years ago
parent
commit
f6147085cd
3 changed files with 26 additions and 19 deletions
  1. 7
    0
      src/include/espeak-ng/espeak_ng.h
  2. 7
    7
      src/libespeak-ng/readclause.c
  3. 12
    12
      src/libespeak-ng/voices.c

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

@@ -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;

+ 7
- 7
src/libespeak-ng/readclause.c View File

@@ -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) {

+ 12
- 12
src/libespeak-ng/voices.c View File

@@ -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;

Loading…
Cancel
Save