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

ENOUTPUT_MODE_SPEAK_AUDIO = 0x0002, ENOUTPUT_MODE_SPEAK_AUDIO = 0x0002,
} espeak_ng_OUTPUT_MODE; } 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 */ /* eSpeak NG 1.49.0 */


typedef struct espeak_ng_ERROR_CONTEXT_ *espeak_ng_ERROR_CONTEXT; typedef struct espeak_ng_ERROR_CONTEXT_ *espeak_ng_ERROR_CONTEXT;

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

voice_name_specified = 1; voice_name_specified = 1;
strcpy(voice_name, sp->voice_name); strcpy(voice_name, sp->voice_name);
language[0] = 0; language[0] = 0;
voice_select.gender = 0;
voice_select.gender = ENGENDER_UNKNOWN;
voice_select.age = 0; voice_select.age = 0;
voice_select.variant = 0; voice_select.variant = 0;
} }
if (voice_name_specified == 0) if (voice_name_specified == 0)
voice_name[0] = 0; // forget a previous voice name if a language is specified 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; voice_select.gender = sp->voice_gender;


if (sp->voice_age != 0) if (sp->voice_age != 0)
if (v_id == NULL) if (v_id == NULL)
return "default"; 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 // a voice variant has not been selected, use the original voice variant
sprintf(buf, "%s+%s", v_id, base_voice_variant_name); sprintf(buf, "%s+%s", v_id, base_voice_variant_name);
strncpy0(voice_name, buf, sizeof(voice_name)); strncpy0(voice_name, buf, sizeof(voice_name));
SSML_STACK *ssml_sp; SSML_STACK *ssml_sp;


static const MNEM_TAB mnem_gender[] = { 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) { if (tag_type & SSML_CLOSE) {

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

#include "translate.h" #include "translate.h"


MNEM_TAB genders[] = { 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 }; int tone_points[12] = { 600, 170, 1200, 135, 2000, 110, 3000, 110, -1, 0 };
score += 400; 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) if (voice_spec->gender == voice->gender)
score += 50; score += 50;
else else
score -= 50; 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 score += 5; // give some preference for non-child female voice if a child is requested


if (voice->age != 0) { if (voice->age != 0) {
if (vp != NULL) { if (vp != NULL) {
voice_select2.languages = &(vp->languages[1]); 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) { if (variant_name[0] != 0) {
sprintf(voice_id, "%s+%s", vp->identifier, variant_name); sprintf(voice_id, "%s+%s", vp->identifier, variant_name);
return voice_id; return voice_id;
} }


gender = 0; 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 #define AGE_OLD 60
if (voice_select2.age < AGE_OLD) if (voice_select2.age < AGE_OLD)
// is the main voice the required gender? // is the main voice the required gender?
skip = 0; skip = 0;


if ((gender != 0) && (vp->gender != gender))
if ((gender != ENGENDER_UNKNOWN) && (vp->gender != gender))
skip = 1; skip = 1;
if ((ix2 == 0) && aged && (vp->age < AGE_OLD)) if ((ix2 == 0) && aged && (vp->age < AGE_OLD))
skip = 1; skip = 1;

Loading…
Cancel
Save