Browse Source

code cleanup: move stressLength, stressAdd and stressAmp handling in LoadVoice()

From now on, stressLength must be set before stressAdd because
stressLength will overwrite any previous value. Usually stressLength is
set in a language file and stressAdd in a voice file.

Previously the order of the two commands didn't matter.
master
Juho Hiltunen 4 years ago
parent
commit
fb233a7b0c
3 changed files with 40 additions and 21 deletions
  1. 2
    1
      CHANGELOG.md
  2. 3
    0
      docs/voices.md
  3. 35
    20
      src/libespeak-ng/voices.c

+ 2
- 1
CHANGELOG.md View File



* Add support for speechPlayer. * Add support for speechPlayer.
* Add more tests to check the various parts of espeak-ng. * Add more tests to check the various parts of espeak-ng.
* Various changes to clean up the codebase.
* Various changes to clean up the codebase (Juho Hiltunen)
* Restructure "option brackets" language option to "brackets" and "bracketsAnnounced". * Restructure "option brackets" language option to "brackets" and "bracketsAnnounced".
* Restructure "stressLength" and "stressAdd" language option
* New Language option: "lowercaseSentence" for ending a sentence if a period is followed by a lower case letter. * New Language option: "lowercaseSentence" for ending a sentence if a period is followed by a lower case letter.
* Added voice variants * Added voice variants
* Renamed zh to cmn (Mandarin) * Renamed zh to cmn (Mandarin)

+ 3
- 0
docs/voices.md View File

`stressLength` values. They are used in the voice variant files in `stressLength` values. They are used in the voice variant files in
`espeak-ng-data/voices/!v` to give some variety. Negative values may be used. `espeak-ng-data/voices/!v` to give some variety. Negative values may be used.


Note that setting `stressLength` after `stressAdd` will overwrite this value.
`stressLength` must be set before `stressAdd`.

### stressAmp ### stressAmp


stressAmp <8 integer values> stressAmp <8 integer values>

+ 35
- 20
src/libespeak-ng/voices.c View File

int tone_only = control & 2; int tone_only = control & 2;
bool language_set = false; bool language_set = false;
bool phonemes_set = false; bool phonemes_set = false;
int stress_amps_set = 0;
int stress_lengths_set = 0;
int stress_add_set = 0;
int conditional_rules = 0; int conditional_rules = 0;


char voicename[40]; char voicename[40];
char path_voices[sizeof(path_home)+12]; char path_voices[sizeof(path_home)+12];


int dict_min = 0; int dict_min = 0;
int stress_amps[8];
int stress_lengths[8];
int stress_add[8]; int stress_add[8];
char names[8][40]; char names[8][40];
char name1[40]; char name1[40];
voice->formant_factor = (int)((1+factor/4) * 256); // nominal formant shift for a different voice pitch voice->formant_factor = (int)((1+factor/4) * 256); // nominal formant shift for a different voice pitch
} }
break; break;
case V_STRESSLENGTH: // stressLength
stress_lengths_set = Read8Numbers(p, stress_lengths);
case V_STRESSLENGTH: {// stressLength
if (translator) {
int stress_lengths_set = 0;
int stress_lengths[8];
stress_lengths_set = Read8Numbers(p, stress_lengths);
for (ix = 0; ix < stress_lengths_set; ix++) {
translator->stress_lengths[ix] = stress_lengths[ix];
}
} else
fprintf(stderr, "Cannot set stressLength: language not set, or is invalid.\n");

break; break;
case V_STRESSAMP: // stressAmp
stress_amps_set = Read8Numbers(p, stress_amps);
}
case V_STRESSAMP: { // stressAmp
if (translator) {
int stress_amps_set = 0;
int stress_amps[8];
stress_amps_set = Read8Numbers(p, stress_amps);
for (ix = 0; ix < stress_amps_set; ix++) {
translator->stress_amps[ix] = stress_amps[ix];
}
} else
fprintf(stderr, "Cannot set stressAmp: language not set, or is invalid.\n");
break; break;
case V_STRESSADD: // stressAdd
stress_add_set = Read8Numbers(p, stress_add);
}
case V_STRESSADD: { // stressAdd
if (translator) {
int stress_add_set = 0;
stress_add_set = Read8Numbers(p, stress_add);

for (ix = 0; ix < stress_add_set; ix++) {
translator->stress_lengths[ix] += stress_add[ix];
}
} else
fprintf(stderr, "Cannot set stressAdd: language not set, or is invalid.\n");

break; break;
}
case V_INTONATION: // intonation case V_INTONATION: // intonation
sscanf(p, "%d", &option_tone_flags); sscanf(p, "%d", &option_tone_flags);
if ((option_tone_flags & 0xff) != 0) { if ((option_tone_flags & 0xff) != 0) {


voice->width[0] = (voice->width[0] * 105)/100; voice->width[0] = (voice->width[0] * 105)/100;


// relative lengths of different stress syllables
for (ix = 0; ix < stress_lengths_set; ix++)
translator->stress_lengths[ix] = stress_lengths[ix];
for (ix = 0; ix < stress_add_set; ix++)
translator->stress_lengths[ix] += stress_add[ix];
for (ix = 0; ix < stress_amps_set; ix++) {
translator->stress_amps[ix] = stress_amps[ix];
}

return voice; return voice;
} }



Loading…
Cancel
Save