|
|
@@ -38,7 +38,7 @@ |
|
|
|
#include "synthesize.h" |
|
|
|
#include "translate.h" |
|
|
|
|
|
|
|
static void SetSpeedFactors(voice_t *voice, int x, int *speed1, int *speed2, int *speed3); |
|
|
|
static void SetSpeedFactors(voice_t *voice, int x, int speeds[3]); |
|
|
|
static void SetSpeedMods(SPEED_FACTORS *speed, int voiceSpeedF1, int wpm, int x); |
|
|
|
static void SetSpeedMultiplier(int *x, int *wpm); |
|
|
|
|
|
|
@@ -138,9 +138,7 @@ static const unsigned char wav_factor_350[] = { |
|
|
|
45 // 450 |
|
|
|
}; |
|
|
|
|
|
|
|
static int speed1 = 130; |
|
|
|
static int speed2 = 121; |
|
|
|
static int speed3 = 118; |
|
|
|
static int len_speeds[3] = { 130, 121, 118 }; |
|
|
|
|
|
|
|
void SetSpeed(int control) |
|
|
|
{ |
|
|
@@ -174,9 +172,9 @@ void SetSpeed(int control) |
|
|
|
// The eSpeak output will be speeded up by at least x2 |
|
|
|
x = 73; |
|
|
|
if (control & 1) { |
|
|
|
speed1 = (x * voice->speedf1)/256; |
|
|
|
speed2 = (x * voice->speedf2)/256; |
|
|
|
speed3 = (x * voice->speedf3)/256; |
|
|
|
len_speeds[0] = (x * voice->speedf1)/256; |
|
|
|
len_speeds[1] = (x * voice->speedf2)/256; |
|
|
|
len_speeds[2] = (x * voice->speedf3)/256; |
|
|
|
} |
|
|
|
if (control & 2) { |
|
|
|
double sonic; |
|
|
@@ -201,7 +199,7 @@ void SetSpeed(int control) |
|
|
|
SetSpeedMultiplier(&x, &wpm); |
|
|
|
|
|
|
|
if (control & 1) { |
|
|
|
SetSpeedFactors(voice, x, &speed1, &speed2, &speed3); |
|
|
|
SetSpeedFactors(voice, x, len_speeds); |
|
|
|
} |
|
|
|
|
|
|
|
if (control & 2) { |
|
|
@@ -229,16 +227,16 @@ static void SetSpeedMultiplier(int *x, int *wpm) { |
|
|
|
*x = 6; |
|
|
|
} |
|
|
|
|
|
|
|
static void SetSpeedFactors(voice_t *voice, int x, int *speed1, int *speed2, int *speed3) { |
|
|
|
static void SetSpeedFactors(voice_t *voice, int x, int speeds[3]) { |
|
|
|
// set speed factors for different syllable positions within a word |
|
|
|
// these are used in CalcLengths() |
|
|
|
*speed1 = (x * voice->speedf1)/256; |
|
|
|
*speed2 = (x * voice->speedf2)/256; |
|
|
|
*speed3 = (x * voice->speedf3)/256; |
|
|
|
speeds[0] = (x * voice->speedf1)/256; |
|
|
|
speeds[1] = (x * voice->speedf2)/256; |
|
|
|
speeds[2] = (x * voice->speedf3)/256; |
|
|
|
|
|
|
|
if (x <= 7) { |
|
|
|
*speed1 = x; |
|
|
|
*speed2 = *speed3 = x - 1; |
|
|
|
speeds[0] = x; |
|
|
|
speeds[1] = speeds[2] = x - 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -523,7 +521,7 @@ void CalcLengths(Translator *tr) |
|
|
|
p->length = prev->length; |
|
|
|
|
|
|
|
if (p->type == phLIQUID) |
|
|
|
p->length = speed1; |
|
|
|
p->length = len_speeds[0]; |
|
|
|
|
|
|
|
if (next->type == phVSTOP) |
|
|
|
p->length = (p->length * 160)/100; |
|
|
@@ -615,11 +613,11 @@ void CalcLengths(Translator *tr) |
|
|
|
} |
|
|
|
|
|
|
|
if (more_syllables == 0) |
|
|
|
length_mod *= speed1; |
|
|
|
length_mod *= len_speeds[0]; |
|
|
|
else if (more_syllables == 1) |
|
|
|
length_mod *= speed2; |
|
|
|
length_mod *= len_speeds[1]; |
|
|
|
else |
|
|
|
length_mod *= speed3; |
|
|
|
length_mod *= len_speeds[2]; |
|
|
|
|
|
|
|
length_mod = length_mod / 128; |
|
|
|
|
|
|
@@ -654,9 +652,9 @@ void CalcLengths(Translator *tr) |
|
|
|
length_mod = length_mod * (256 + (280 - len)/3)/256; |
|
|
|
} |
|
|
|
|
|
|
|
if (length_mod > tr->langopts.max_lengthmod*speed1) { |
|
|
|
if (length_mod > tr->langopts.max_lengthmod*len_speeds[0]) { |
|
|
|
// limit the vowel length adjustment for some languages |
|
|
|
length_mod = (tr->langopts.max_lengthmod*speed1); |
|
|
|
length_mod = (tr->langopts.max_lengthmod*len_speeds[0]); |
|
|
|
} |
|
|
|
|
|
|
|
length_mod = length_mod / 128; |