Browse Source

cleanup: refactor and remove duplication from SetSpeed() implementations.

There are two SetSpeed(), one for Sonic and one without. The differences
are very small.

In SetSpeedMods(), sample rate is adjusted for Sonic only:
 speed.min_sample_len = (speed.min_sample_len * samplerate_native) / 22050;

Since samplerate_native is 22050 at the moment this line has no effect.
master
Juho Hiltunen 2 years ago
parent
commit
bc16f819dd
1 changed files with 53 additions and 88 deletions
  1. 53
    88
      src/libespeak-ng/setlengths.c

+ 53
- 88
src/libespeak-ng/setlengths.c View File

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


static void SetSpeedMods(int wpm, int x);

extern int saved_parameters[]; extern int saved_parameters[];


// convert from words-per-minute to internal speed factor // convert from words-per-minute to internal speed factor
void SetSpeed(int control) void SetSpeed(int control)
{ {
int x; int x;
int s1;
int wpm; int wpm;
int wpm2; int wpm2;
int wpm_value; int wpm_value;
} }


if (control & 2) { if (control & 2) {
// these are used in synthesis file

if (wpm > 350) {
speed.lenmod_factor = 85 - (wpm - 350) / 3;
speed.lenmod2_factor = 60 - (wpm - 350) / 8;
} else if (wpm > 250) {
speed.lenmod_factor = 110 - (wpm - 250)/4;
speed.lenmod2_factor = 110 - (wpm - 250)/2;
}

s1 = (x * voice->speedf1)/256;

if (wpm >= 170)
speed.wav_factor = 110 + (150*s1)/128; // reduced speed adjustment, used for playing recorded sounds
else
speed.wav_factor = 128 + (128*s1)/130; // = 215 at 170 wpm

if (wpm >= 350)
speed.wav_factor = wav_factor_350[wpm-350];

if (wpm >= 390) {
speed.min_sample_len = espeakRATE_MAXIMUM - (wpm - 400)/2;
if (wpm > 440)
speed.min_sample_len = 420 - (wpm - 440);
}

// adjust for different sample rates
speed.min_sample_len = (speed.min_sample_len * samplerate_native) / 22050;

speed.pause_factor = (256 * s1)/115; // full speed adjustment, used for pause length
speed.clause_pause_factor = 0;

if (wpm > 430)
speed.pause_factor = 12;
else if (wpm > 400)
speed.pause_factor = 13;
else if (wpm > 374)
speed.pause_factor = 14;
else if (wpm > 350)
speed.pause_factor = pause_factor_350[wpm - 350];

if (speed.clause_pause_factor == 0) {
// restrict the reduction of pauses between clauses
if ((speed.clause_pause_factor = speed.pause_factor) < 16)
speed.clause_pause_factor = 16;
}
}
SetSpeedMods(wpm, x);
}
} }


#else #else
{ {
// This is the earlier version of SetSpeed() before sonic speed-up was added // This is the earlier version of SetSpeed() before sonic speed-up was added
int x; int x;
int s1;
int wpm; int wpm;
int wpm2; int wpm2;


} }


if (control & 2) { if (control & 2) {
// these are used in synthesis file

if (wpm > 350) {
speed.lenmod_factor = 85 - (wpm - 350) / 3;
speed.lenmod2_factor = 60 - (wpm - 350) / 8;
} else if (wpm > 250) {
speed.lenmod_factor = 110 - (wpm - 250)/4;
speed.lenmod2_factor = 110 - (wpm - 250)/2;
}
SetSpeedMods(wpm, x);
}
}


s1 = (x * voice->speedf1)/256;
#endif


if (wpm >= 170)
speed.wav_factor = 110 + (150*s1)/128; // reduced speed adjustment, used for playing recorded sounds
else
speed.wav_factor = 128 + (128*s1)/130; // = 215 at 170 wpm
static void SetSpeedMods(int wpm, int x) {
// these are used in synthesis file


if (wpm >= 350)
speed.wav_factor = wav_factor_350[wpm-350];
if (wpm > 350) {
speed.lenmod_factor = 85 - (wpm - 350) / 3;
speed.lenmod2_factor = 60 - (wpm - 350) / 8;
} else if (wpm > 250) {
speed.lenmod_factor = 110 - (wpm - 250)/4;
speed.lenmod2_factor = 110 - (wpm - 250)/2;
}


if (wpm >= 390) {
speed.min_sample_len = espeakRATE_MAXIMUM - (wpm - 400)/2;
if (wpm > 440)
speed.min_sample_len = 420 - (wpm - 440);
}


speed.pause_factor = (256 * s1)/115; // full speed adjustment, used for pause length
speed.clause_pause_factor = 0;

if (wpm > 430)
speed.pause_factor = 12;
else if (wpm > 400)
speed.pause_factor = 13;
else if (wpm > 374)
speed.pause_factor = 14;
else if (wpm > 350)
speed.pause_factor = pause_factor_350[wpm - 350];

if (speed.clause_pause_factor == 0) {
// restrict the reduction of pauses between clauses
if ((speed.clause_pause_factor = speed.pause_factor) < 16)
speed.clause_pause_factor = 16;
}
int s1 = (x * voice->speedf1)/256;

if (wpm >= 170)
speed.wav_factor = 110 + (150*s1)/128; // reduced speed adjustment, used for playing recorded sounds
else
speed.wav_factor = 128 + (128*s1)/130; // = 215 at 170 wpm

if (wpm >= 350)
speed.wav_factor = wav_factor_350[wpm-350];

if (wpm >= 390) {
speed.min_sample_len = espeakRATE_MAXIMUM - (wpm - 400)/2;
if (wpm > 440)
speed.min_sample_len = 420 - (wpm - 440);
} }
}


#if HAVE_SONIC_H
// adjust for different sample rates
speed.min_sample_len = (speed.min_sample_len * samplerate_native) / 22050;
#endif #endif


speed.pause_factor = (256 * s1)/115; // full speed adjustment, used for pause length
speed.clause_pause_factor = 0;

if (wpm > 430)
speed.pause_factor = 12;
else if (wpm > 400)
speed.pause_factor = 13;
else if (wpm > 374)
speed.pause_factor = 14;
else if (wpm > 350)
speed.pause_factor = pause_factor_350[wpm - 350];

if (speed.clause_pause_factor == 0) {
// restrict the reduction of pauses between clauses
if ((speed.clause_pause_factor = speed.pause_factor) < 16)
speed.clause_pause_factor = 16;
}
}

espeak_ng_STATUS SetParameter(int parameter, int value, int relative) espeak_ng_STATUS SetParameter(int parameter, int value, int relative)
{ {
// parameter: reset-all, amp, pitch, speed, linelength, expression, capitals, number grouping // parameter: reset-all, amp, pitch, speed, linelength, expression, capitals, number grouping

Loading…
Cancel
Save