Contribute to #68 Reduce number of externs and static-returnsmaster
@@ -381,7 +381,6 @@ typedef struct CompileContext { | |||
int duplicate_references; | |||
int count_frames; | |||
int error_count; | |||
int resample_count; | |||
int then_count; | |||
bool after_if; | |||
@@ -1104,9 +1103,9 @@ static int LoadWavefile(CompileContext *ctx, FILE *f, const char *fname) | |||
sr2 = Read4Bytes(f); | |||
fseek(f, 40, SEEK_SET); | |||
if ((sr1 != samplerate_native) || (sr2 != sr1*2)) { | |||
if (sr1 != samplerate_native) | |||
error(ctx, "Can't resample (%d to %d): %s", sr1, samplerate_native, fname); | |||
if ((sr1 != samplerate) || (sr2 != sr1*2)) { | |||
if (sr1 != samplerate) | |||
error(ctx, "Can't resample (%d to %d): %s", sr1, samplerate, fname); | |||
else | |||
error(ctx, "WAV file is not mono: %s", fname); | |||
return 0; | |||
@@ -2198,6 +2197,7 @@ static void WritePhonemeTables(CompileContext *ctx) | |||
static void EndPhonemeTable(CompileContext *ctx) | |||
{ | |||
int ix; | |||
char buf[5]; | |||
if (ctx->n_phoneme_tabs == 0) | |||
return; | |||
@@ -2206,7 +2206,7 @@ static void EndPhonemeTable(CompileContext *ctx) | |||
for (ix = 0; ix < ctx->n_phcodes; ix++) { | |||
if (ctx->phoneme_tab2[ix].type == phINVALID) { | |||
error(ctx, "Phoneme [%s] not declared, referenced at line %d", | |||
WordToString(ctx->phoneme_tab2[ix].mnemonic), (int)(ctx->phoneme_tab2[ix].program)); | |||
WordToString(buf, ctx->phoneme_tab2[ix].mnemonic), (int)(ctx->phoneme_tab2[ix].program)); | |||
ctx->error_count++; | |||
ctx->phoneme_tab2[ix].type = 0; // prevent the error message repeating | |||
} | |||
@@ -2371,7 +2371,7 @@ espeak_ng_CompilePhonemeDataPath(long rate, | |||
sprintf(phdst, "%s", path_home); | |||
} | |||
samplerate_native = samplerate = rate; | |||
samplerate = rate; | |||
LoadPhData(NULL, NULL); | |||
if (LoadVoice("", 8/*compiling phonemes*/) == NULL) { | |||
clean_context(ctx); | |||
@@ -2382,7 +2382,6 @@ espeak_ng_CompilePhonemeDataPath(long rate, | |||
WavegenSetVoice(voice); | |||
ctx->error_count = 0; | |||
ctx->resample_count = 0; | |||
ctx->f_errors = log; | |||
strncpy0(ctx->current_fname, "phonemes", sizeof(ctx->current_fname)); | |||
@@ -2451,7 +2450,7 @@ espeak_ng_CompilePhonemeDataPath(long rate, | |||
// write a word so that further data doesn't start at displ=0 | |||
Write4Bytes(ctx->f_phdata, version_phdata); | |||
Write4Bytes(ctx->f_phdata, samplerate_native); | |||
Write4Bytes(ctx->f_phdata, samplerate); | |||
Write4Bytes(ctx->f_phindex, version_phdata); | |||
memset(ctx->ref_hash_tab, 0, sizeof(ctx->ref_hash_tab)); | |||
@@ -2483,11 +2482,7 @@ espeak_ng_CompilePhonemeDataPath(long rate, | |||
WavegenFini(); | |||
if (ctx->resample_count > 0) { | |||
fprintf(ctx->f_errors, "\n%d WAV files resampled to %d Hz\n", ctx->resample_count, samplerate_native); | |||
fprintf(log, "Compiled phonemes: %d errors, %d files resampled to %d Hz.\n", ctx->error_count, ctx->resample_count, samplerate_native); | |||
} else | |||
fprintf(log, "Compiled phonemes: %d errors.\n", ctx->error_count); | |||
fprintf(log, "Compiled phonemes: %d errors.\n", ctx->error_count); | |||
if (ctx->f_errors != stderr && ctx->f_errors != stdout) | |||
fclose(ctx->f_errors); |
@@ -2084,6 +2084,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c | |||
int ix; | |||
unsigned int digit_count = 0; | |||
char *p; | |||
char word_buf[5]; | |||
const ALPHABET *alphabet; | |||
int dict_flags0 = 0; | |||
MatchRecord match1 = { 0 }; | |||
@@ -2240,12 +2241,12 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c | |||
if (((alphabet = AlphabetFromChar(letter)) != NULL) && (alphabet->offset != tr->letter_bits_offset)) { | |||
if (tr->langopts.alt_alphabet == alphabet->offset) { | |||
sprintf(phonemes, "%c%s", phonSWITCH, WordToString2(tr->langopts.alt_alphabet_lang)); | |||
sprintf(phonemes, "%c%s", phonSWITCH, WordToString2(word_buf, tr->langopts.alt_alphabet_lang)); | |||
return 0; | |||
} | |||
if (alphabet->flags & AL_WORDS) { | |||
// switch to the nominated language for this alphabet | |||
sprintf(phonemes, "%c%s", phonSWITCH, WordToString2(alphabet->language)); | |||
sprintf(phonemes, "%c%s", phonSWITCH, WordToString2(word_buf, alphabet->language)); | |||
return 0; | |||
} | |||
} |
@@ -249,7 +249,6 @@ phoneme_add_feature(PHONEME_TAB *phoneme, | |||
// Several phoneme tables may be loaded into memory. phoneme_tab points to | |||
// one for the current voice | |||
extern int n_phoneme_tab; | |||
extern int current_phoneme_table; | |||
extern PHONEME_TAB *phoneme_tab[N_PHONEME_TAB]; | |||
typedef struct { |
@@ -47,7 +47,7 @@ | |||
#include "ssml.h" // for SSML_STACK, ProcessSsmlTag, N_PARAM... | |||
#include "synthdata.h" // for SelectPhonemeTable | |||
#include "translate.h" // for Translator, utf8_out, CLAUSE_OPTION... | |||
#include "voice.h" // for voice, voice_t, current_voice_selected | |||
#include "voice.h" // for voice, voice_t, espeak_GetCurrentVoice | |||
#define N_XML_BUF 500 | |||
@@ -167,15 +167,12 @@ static void UngetC(int c) | |||
ungot_char = c; | |||
} | |||
const char *WordToString2(unsigned int word) | |||
const char *WordToString2(char buf[5], unsigned int word) | |||
{ | |||
// Convert a language mnemonic word into a string | |||
int ix; | |||
static char buf[5]; | |||
char *p; | |||
MAKE_MEM_UNDEFINED(&buf, sizeof(buf)); | |||
p = buf; | |||
for (ix = 3; ix >= 0; ix--) { | |||
if ((*p = word >> (ix*8)) != 0) | |||
@@ -199,7 +196,7 @@ static const char *LookupSpecial(Translator *tr, const char *string, char *text_ | |||
return NULL; | |||
} | |||
static const char *LookupCharName(Translator *tr, int c, bool only) | |||
static const char *LookupCharName(char buf[60], Translator *tr, int c, bool only) | |||
{ | |||
// Find the phoneme string (in ascii) to speak the name of character c | |||
// Used for punctuation characters and symbols | |||
@@ -210,9 +207,6 @@ static const char *LookupCharName(Translator *tr, int c, bool only) | |||
char phonemes[60]; | |||
const char *lang_name = NULL; | |||
char *string; | |||
static char buf[60]; | |||
MAKE_MEM_UNDEFINED(&buf, sizeof(buf)); | |||
buf[0] = 0; | |||
flags[0] = 0; | |||
@@ -284,6 +278,7 @@ static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output | |||
int bufix1; | |||
char buf[200]; | |||
char ph_buf[30]; | |||
char cn_buf[60]; | |||
c2 = *c2_ptr; | |||
buf[0] = 0; | |||
@@ -298,7 +293,7 @@ static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output | |||
punctname = ph_buf; // use word for 'period' instead of 'dot' | |||
} | |||
if (punctname == NULL) | |||
punctname = LookupCharName(tr, c1, false); | |||
punctname = LookupCharName(cn_buf, tr, c1, false); | |||
if (punctname == NULL) | |||
return -1; | |||
@@ -419,7 +414,7 @@ void SetVoiceStack(espeak_VOICE *v, const char *variant_name) | |||
if (variant_name[0] == '!' && variant_name[1] == 'v' && variant_name[2] == PATHSEP) | |||
variant_name += 3; // strip variant directory name, !v plus PATHSEP | |||
strncpy0(base_voice_variant_name, variant_name, sizeof(base_voice_variant_name)); | |||
memcpy(&base_voice, ¤t_voice_selected, sizeof(base_voice)); | |||
memcpy(&base_voice, espeak_GetCurrentVoice(), sizeof(base_voice)); | |||
} | |||
static void RemoveChar(char *p) | |||
@@ -833,7 +828,8 @@ int ReadClause(Translator *tr, char *buf, short *charix, int *charix_top, int n_ | |||
char *p2; | |||
p2 = &buf[ix]; | |||
sprintf(p2, "%s", LookupCharName(tr, c1, true)); | |||
char cn_buf[60]; | |||
sprintf(p2, "%s", LookupCharName(cn_buf, tr, c1, true)); | |||
if (p2[0] != 0) { | |||
ix += strlen(p2); | |||
announced_punctuation = c1; | |||
@@ -1020,6 +1016,7 @@ static void DecodeWithPhonemeMode(char *buf, char *phonemes, Translator *tr, Tra | |||
} else { | |||
SetWordStress(tr2, phonemes, flags, -1, 0); | |||
DecodePhonemes(phonemes, phonemes2); | |||
sprintf(buf, "[\002_^_%s %s _^_%s]]", ESPEAKNG_DEFAULT_VOICE, phonemes2, WordToString2(tr->translator_name)); | |||
char wbuf[5]; | |||
sprintf(buf, "[\002_^_%s %s _^_%s]]", ESPEAKNG_DEFAULT_VOICE, phonemes2, WordToString2(wbuf, tr->translator_name)); | |||
} | |||
} | |||
} |
@@ -36,7 +36,7 @@ extern PARAM_STACK param_stack[]; | |||
int clause_type_from_codepoint(uint32_t c); | |||
int Eof(void); | |||
const char *WordToString2(unsigned int word); | |||
const char *WordToString2(char buf[5], unsigned int word); | |||
int AddNameData(const char *name, | |||
int wide); | |||
int ReadClause(Translator *tr, |
@@ -84,8 +84,6 @@ static int min_buffer_length = 60; // minimum buffer length in ms | |||
static espeak_ng_STATUS err = ENS_OK; | |||
static t_espeak_callback *synth_callback = NULL; | |||
int (*uri_callback)(int, const char *, const char *) = NULL; | |||
int (*phoneme_callback)(const char *) = NULL; | |||
char path_home[N_PATH_HOME]; // this is the espeak-ng-data directory | |||
extern int saved_parameters[N_SPEECH_PARAM]; // Parameters saved on synthesis start | |||
@@ -381,7 +379,8 @@ ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Initialize(espeak_ng_ERROR_CONTEXT *con | |||
WavegenInit(srate, 0); | |||
LoadConfig(); | |||
memset(¤t_voice_selected, 0, sizeof(current_voice_selected)); | |||
espeak_VOICE *current_voice_selected = espeak_GetCurrentVoice(); | |||
memset(current_voice_selected, 0, sizeof(espeak_VOICE)); | |||
SetVoiceStack(NULL, ""); | |||
SynthesizeInit(); | |||
InitNamedata(); | |||
@@ -653,16 +652,6 @@ ESPEAK_API void espeak_SetSynthCallback(t_espeak_callback *SynthCallback) | |||
#endif | |||
} | |||
ESPEAK_API void espeak_SetUriCallback(int (*UriCallback)(int, const char *, const char *)) | |||
{ | |||
uri_callback = UriCallback; | |||
} | |||
ESPEAK_API void espeak_SetPhonemeCallback(int (*PhonemeCallback)(const char *)) | |||
{ | |||
phoneme_callback = PhonemeCallback; | |||
} | |||
ESPEAK_NG_API espeak_ng_STATUS | |||
espeak_ng_Synthesize(const void *text, size_t size, | |||
unsigned int position, |
@@ -87,6 +87,8 @@ static const MNEM_TAB ssmltags[] = { | |||
{ NULL, 0 } | |||
}; | |||
static int (*uri_callback)(int, const char *, const char *) = NULL; | |||
static int attrcmp(const wchar_t *string1, const char *string2) | |||
{ | |||
int ix; | |||
@@ -973,6 +975,13 @@ int ProcessSsmlTag(wchar_t *xml_buf, char *outbuf, int *outix, int n_outbuf, con | |||
return 0; | |||
} | |||
#pragma GCC visibility push(default) | |||
ESPEAK_API void espeak_SetUriCallback(int (*UriCallback)(int, const char *, const char *)) | |||
{ | |||
uri_callback = UriCallback; | |||
} | |||
#pragma GCC visibility pop | |||
static const MNEM_TAB xml_entity_mnemonics[] = { | |||
{ "gt", '>' }, | |||
{ "lt", 0xe000 + '<' }, // private usage area, to avoid confusion with XML tag |
@@ -77,7 +77,7 @@ espeak_ng_STATUS LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, | |||
mbr_name_prefix = 0; | |||
if (mbrola_voice == NULL) { | |||
samplerate = samplerate_native; | |||
samplerate = samplerate; | |||
SetParameter(espeakVOICETYPE, 0, 0); | |||
return ENS_OK; | |||
} | |||
@@ -350,6 +350,7 @@ int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, bool resume, FILE *f_mb | |||
const char *final_pitch; | |||
char *ptr; | |||
char mbr_buf[120]; | |||
char phbuf[5]; | |||
static int phix; | |||
static int embedded_ix; | |||
@@ -405,7 +406,7 @@ int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, bool resume, FILE *f_mb | |||
DoPhonemeMarker(espeakEVENT_PHONEME, (p->sourceix & 0x7ff) + clause_start_char, 0, phoneme_name); | |||
} | |||
ptr += sprintf(ptr, "%s\t", WordToString(name)); | |||
ptr += sprintf(ptr, "%s\t", WordToString(phbuf, name)); | |||
if (name2 == '_') { | |||
// add a pause after this phoneme | |||
@@ -438,7 +439,7 @@ int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, bool resume, FILE *f_mb | |||
ptr += sprintf(ptr, "%d\t%s", len1, pitch); | |||
pitch = WritePitch(p->env, p->pitch1, p->pitch2, -len_percent, 0); | |||
ptr += sprintf(ptr, "%s\t%d\t%s", WordToString(name2), len-len1, pitch); | |||
ptr += sprintf(ptr, "%s\t%d\t%s", WordToString(phbuf, name2), len-len1, pitch); | |||
} | |||
done = true; | |||
break; | |||
@@ -490,7 +491,7 @@ int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, bool resume, FILE *f_mb | |||
if (!done) { | |||
if (name2 != 0) { | |||
len1 = (len * len_percent)/100; | |||
ptr += sprintf(ptr, "%d\n%s\t", len1, WordToString(name2)); | |||
ptr += sprintf(ptr, "%d\n%s\t", len1, WordToString(phbuf, name2)); | |||
len -= len1; | |||
} | |||
ptr += sprintf(ptr, "%d%s\n", len, final_pitch); |
@@ -49,7 +49,7 @@ const int version_phdata = 0x014801; | |||
// copy the current phoneme table into here | |||
int n_phoneme_tab; | |||
int current_phoneme_table; | |||
static int current_phoneme_table; | |||
PHONEME_TAB *phoneme_tab[N_PHONEME_TAB]; | |||
static unsigned short *phoneme_index = NULL; | |||
@@ -164,6 +164,7 @@ void FreePhData(void) | |||
phoneme_index = NULL; | |||
phondata_ptr = NULL; | |||
tunes = NULL; | |||
current_phoneme_table = -1; | |||
} | |||
int PhonemeCode(unsigned int mnem) | |||
@@ -353,6 +354,7 @@ static void SetUpPhonemeTable(int number) | |||
void SelectPhonemeTable(int number) | |||
{ | |||
if (current_phoneme_table == number) return; | |||
n_phoneme_tab = 0; | |||
MAKE_MEM_UNDEFINED(&phoneme_tab, sizeof(phoneme_tab)); | |||
SetUpPhonemeTable(number); // recursively for included phoneme tables | |||
@@ -391,7 +393,8 @@ int SelectPhonemeTableName(const char *name) | |||
static void InvalidInstn(PHONEME_TAB *ph, int instn) | |||
{ | |||
fprintf(stderr, "Invalid instruction %.4x for phoneme '%s'\n", instn, WordToString(ph->mnemonic)); | |||
char buf[5]; | |||
fprintf(stderr, "Invalid instruction %.4x for phoneme '%s'\n", instn, WordToString(buf, ph->mnemonic)); | |||
} | |||
static bool StressCondition(Translator *tr, PHONEME_LIST *plist, int condition, int control) |
@@ -68,17 +68,16 @@ static int syllable_centre; | |||
static voice_t *new_voice = NULL; | |||
static int (*phoneme_callback)(const char *) = NULL; | |||
#define RMS_GLOTTAL1 35 // vowel before glottal stop | |||
#define RMS_START 28 // 28 | |||
#define VOWEL_FRONT_LENGTH 50 | |||
const char *WordToString(unsigned int word) | |||
const char *WordToString(char buf[5], unsigned int word) | |||
{ | |||
// Convert a phoneme mnemonic word into a string | |||
int ix; | |||
static char buf[5]; | |||
MAKE_MEM_UNDEFINED(&buf, sizeof(buf)); | |||
for (ix = 0; ix < 4; ix++) | |||
buf[ix] = word >> (ix*8); | |||
@@ -1552,8 +1551,7 @@ int SpeakNextClause(int control) | |||
return 0; | |||
} | |||
if (current_phoneme_table != voice->phoneme_tab_ix) | |||
SelectPhonemeTable(voice->phoneme_tab_ix); | |||
SelectPhonemeTable(voice->phoneme_tab_ix); | |||
// read the next clause from the input text file, translate it, and generate | |||
// entries in the wavegen command queue | |||
@@ -1592,3 +1590,10 @@ int SpeakNextClause(int control) | |||
return 1; | |||
} | |||
#pragma GCC visibility push(default) | |||
ESPEAK_API void espeak_SetPhonemeCallback(int (*PhonemeCallback)(const char *)) | |||
{ | |||
phoneme_callback = PhonemeCallback; | |||
} | |||
#pragma GCC visibility pop |
@@ -76,7 +76,7 @@ extern "C" | |||
#define N_EMBEDDED_VALUES 15 | |||
extern int embedded_value[N_EMBEDDED_VALUES]; | |||
extern int embedded_default[N_EMBEDDED_VALUES]; | |||
extern const int embedded_default[N_EMBEDDED_VALUES]; | |||
#define N_KLATTP 10 // this affects the phoneme data file format | |||
#define N_KLATTP2 14 // used in vowel files, with extra parameters for future extensions | |||
@@ -423,7 +423,6 @@ void MarkerEvent(int type, unsigned int char_position, int value, int value2, un | |||
extern unsigned char *wavefile_data; | |||
extern int samplerate; | |||
extern int samplerate_native; | |||
#define N_ECHO_BUF 5500 // max of 250mS at 22050 Hz | |||
extern int echo_head; | |||
@@ -464,7 +463,7 @@ void DoPhonemeMarker(int type, int char_posn, int length, char *name); | |||
int DoSample3(PHONEME_DATA *phdata, int length_mod, int amp); | |||
int DoSpect2(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, PHONEME_LIST *plist, int modulation); | |||
int PauseLength(int pause, int control); | |||
const char *WordToString(unsigned int word); | |||
const char *WordToString(char buf[5], unsigned int word); | |||
#ifdef __cplusplus | |||
} |
@@ -542,7 +542,7 @@ Translator *SelectTranslator(const char *name) | |||
{ | |||
static const unsigned char stress_amps_be[8] = { 12, 10, 8, 8, 0, 0, 16, 17 }; | |||
static const short stress_lengths_be[8] = { 160, 140, 200, 140, 0, 0, 240, 160 }; | |||
static wchar_t vowels_be[] = { // offset by 0x420 -- а е ё о у ы э ю я і | |||
static const wchar_t vowels_be[] = { // offset by 0x420 -- а е ё о у ы э ю я і | |||
0x10, 0x15, 0x31, 0x1e, 0x23, 0x2b, 0x2d, 0x2e, 0x2f, 0x36, 0 | |||
}; | |||
static const unsigned char consonants_be[] = { // б в г д ж з й к л м н п р с т ф х ц ч ш ў |
@@ -649,9 +649,6 @@ extern char dictionary_name[40]; | |||
extern espeak_ng_TEXT_DECODER *p_decoder; | |||
extern int dictionary_skipwords; | |||
extern int (*uri_callback)(int, const char *, const char *); | |||
extern int (*phoneme_callback)(const char *); | |||
#define LEADING_2_BITS 0xC0 // 0b11000000 | |||
#define UTF8_TAIL_BITS 0x80 // 0b10000000 | |||
@@ -918,7 +918,8 @@ static int TranslateLetter(Translator *tr, char *word, char *phonemes, int contr | |||
char hangul_buf[12]; | |||
// speak in the language for this alphabet (or English) | |||
ph_buf[2] = SetTranslator3(WordToString2(language)); | |||
char word_buf[5]; | |||
ph_buf[2] = SetTranslator3(WordToString2(word_buf, language)); | |||
if (translator3 != NULL) { | |||
int code; |
@@ -79,8 +79,6 @@ typedef struct { | |||
} voice_t; | |||
extern espeak_VOICE current_voice_selected; | |||
extern voice_t *voice; | |||
extern int tone_points[12]; | |||
@@ -72,7 +72,7 @@ int formant_rate[9]; // values adjusted for actual sample rate | |||
static int n_voices_list = 0; | |||
static espeak_VOICE *voices_list[N_VOICES_LIST]; | |||
espeak_VOICE current_voice_selected; | |||
static espeak_VOICE current_voice_selected; | |||
#define N_VOICE_VARIANTS 12 | |||
static const char variants_either[N_VOICE_VARIANTS] = { 1, 2, 12, 3, 13, 4, 14, 5, 11, 0 }; | |||
@@ -271,7 +271,7 @@ void VoiceReset(int tone_only) | |||
voice->voicing = 64; | |||
voice->consonant_amp = 90; // change from 100 to 90 for v.1.47 | |||
voice->consonant_ampv = 100; | |||
voice->samplerate = samplerate_native; | |||
voice->samplerate = samplerate; | |||
memset(voice->klattv, 0, sizeof(voice->klattv)); | |||
speed.fast_settings = espeakRATE_MAXIMUM; | |||
@@ -1072,9 +1072,7 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found) | |||
if ((voice_select2.languages == NULL) || (voice_select2.languages[0] == 0)) { | |||
// no language is specified. Get language from the named voice | |||
static char buf[60]; | |||
MAKE_MEM_UNDEFINED(&buf, sizeof(buf)); | |||
char buf[60]; | |||
if (voice_select2.name == NULL) { | |||
if ((voice_select2.name = voice_select2.identifier) == NULL) |
@@ -62,7 +62,6 @@ int embedded_value[N_EMBEDDED_VALUES]; | |||
static int PHASE_INC_FACTOR; | |||
int samplerate = 0; // this is set by Wavegeninit() | |||
int samplerate_native = 0; | |||
static wavegen_peaks_t peaks[N_PEAKS]; | |||
static int peak_harmonic[N_PEAKS]; | |||
@@ -119,7 +118,7 @@ int wcmdq_head = 0; | |||
int wcmdq_tail = 0; | |||
// pitch,speed, | |||
int embedded_default[N_EMBEDDED_VALUES] = { 0, 50, espeakRATE_NORMAL, 100, 50, 0, 0, 0, espeakRATE_NORMAL, 0, 0, 0, 0, 0, 0 }; | |||
const int embedded_default[N_EMBEDDED_VALUES] = { 0, 50, espeakRATE_NORMAL, 100, 50, 0, 0, 0, espeakRATE_NORMAL, 0, 0, 0, 0, 0, 0 }; | |||
static int embedded_max[N_EMBEDDED_VALUES] = { 0, 0x7fff, 750, 300, 99, 99, 99, 0, 750, 0, 0, 0, 0, 4, 0 }; | |||
#if HAVE_SONIC_H | |||
@@ -330,7 +329,7 @@ void WavegenInit(int rate, int wavemult_fact) | |||
wavemult_fact = 60; // default | |||
wvoice = NULL; | |||
samplerate = samplerate_native = rate; | |||
samplerate = rate; | |||
PHASE_INC_FACTOR = 0x8000000 / samplerate; // assumes pitch is Hz*32 | |||
Flutter_inc = (64 * samplerate)/rate; | |||
samplecount = 0; |