From bc16f819dd7c2889ff5b1ebfcb32095cb0f457ac Mon Sep 17 00:00:00 2001 From: Juho Hiltunen Date: Mon, 24 Oct 2022 21:49:12 +0300 Subject: [PATCH] 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. --- src/libespeak-ng/setlengths.c | 149 +++++++++++++--------------------- 1 file changed, 57 insertions(+), 92 deletions(-) diff --git a/src/libespeak-ng/setlengths.c b/src/libespeak-ng/setlengths.c index 4db3e148..80acaaef 100644 --- a/src/libespeak-ng/setlengths.c +++ b/src/libespeak-ng/setlengths.c @@ -38,6 +38,8 @@ #include "synthesize.h" #include "translate.h" +static void SetSpeedMods(int wpm, int x); + extern int saved_parameters[]; // convert from words-per-minute to internal speed factor @@ -143,7 +145,6 @@ static int speed3 = 118; void SetSpeed(int control) { int x; - int s1; int wpm; int wpm2; int wpm_value; @@ -218,53 +219,8 @@ void SetSpeed(int control) } 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 @@ -273,7 +229,6 @@ void SetSpeed(int control) { // This is the earlier version of SetSpeed() before sonic speed-up was added int x; - int s1; int wpm; int wpm2; @@ -314,54 +269,64 @@ void SetSpeed(int control) } 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); - } - - 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); } } #endif +static void SetSpeedMods(int wpm, int x) { + // 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; + } + + + 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 + + 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) { // parameter: reset-all, amp, pitch, speed, linelength, expression, capitals, number grouping