Browse Source

Merge remote-tracking branch 'jaacoppi/includes'

master
Reece H. Dunn 7 years ago
parent
commit
c73530f7dd

+ 4
- 0
src/libespeak-ng/compiledata.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "readclause.h"
#include "synthdata.h"
#include "wavegen.h"

#include "error.h" #include "error.h"
#include "phoneme.h" #include "phoneme.h"
#include "voice.h" #include "voice.h"

+ 4
- 2
src/libespeak-ng/compiledict.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "compiledict.h"
#include "dictionary.h"
#include "readclause.h"

#include "error.h" #include "error.h"
#include "speech.h" #include "speech.h"
#include "phoneme.h" #include "phoneme.h"
#include "synthesize.h" #include "synthesize.h"
#include "translate.h" #include "translate.h"


extern void Write4Bytes(FILE *f, int value);

static FILE *f_log = NULL; static FILE *f_log = NULL;
extern char *dir_dictionary; extern char *dir_dictionary;



+ 50
- 0
src/libespeak-ng/compiledict.h View File

/*
* Copyright (C) 2005 to 2015 by Jonathan Duddington
* email: [email protected]
* Copyright (C) 2015-2018 Reece H. Dunn
* Copyright (C) 2018 Juho Hiltunen
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see: <http://www.gnu.org/licenses/>.
*/

#ifndef ESPEAK_NG_COMPILEDICT_H
#define ESPEAK_NG_COMPILEDICT_H

#ifdef __cplusplus
extern "C"
{
#endif

char *DecodeRule(const char *group_chars,
int group_length,
char *rule,
int control);

ESPEAK_NG_API espeak_ng_STATUS espeak_ng_CompileDictionary(const char *dsource,
const char *dict_name,
FILE *log,
int flags,
espeak_ng_ERROR_CONTEXT *context);


void print_dictionary_flags(unsigned int *flags,
char *buf,
int buf_len);

#ifdef __cplusplus
}
#endif

#endif


+ 2
- 0
src/libespeak-ng/compilembrola.c View File

#include <espeak-ng/espeak_ng.h> #include <espeak-ng/espeak_ng.h>
#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>


#include "mbrola.h"

#include "error.h" #include "error.h"
#include "phoneme.h" #include "phoneme.h"
#include "speech.h" #include "speech.h"

+ 6
- 1
src/libespeak-ng/dictionary.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "dictionary.h"
#include "numbers.h"
#include "readclause.h"
#include "synthdata.h"

#include "speech.h" #include "speech.h"
#include "phoneme.h" #include "phoneme.h"
#include "voice.h" #include "voice.h"
} }
#pragma GCC visibility pop #pragma GCC visibility pop


int Reverse4Bytes(int word)
static int Reverse4Bytes(int word)
{ {
// reverse the order of bytes from little-endian to big-endian // reverse the order of bytes from little-endian to big-endian
#ifdef ARCH_BIG #ifdef ARCH_BIG

+ 57
- 0
src/libespeak-ng/dictionary.h View File

/*
* Copyright (C) 2005 to 2015 by Jonathan Duddington
* email: [email protected]
* Copyright (C) 2015-2018 Reece H. Dunn
* Copyright (C) 2018 Juho Hiltunen
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see: <http://www.gnu.org/licenses/>.
*/

#ifndef ESPEAK_NG_DICTIONARY_H
#define ESPEAK_NG_DICTIONARY_H

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

#ifdef __cplusplus
extern "C"
{
#endif

void strncpy0(char *to, const char *from, int size);
int LoadDictionary(Translator *tr, const char *name, int no_error);
int HashDictionary(const char *string);
const char *EncodePhonemes(const char *p, char *outptr, int *bad_phoneme);
void DecodePhonemes(const char *inptr, char *outptr);
char *WritePhMnemonic(char *phon_out, PHONEME_TAB *ph, PHONEME_LIST *plist, int use_ipa, int *flags);
const char *GetTranslatedPhonemeString(int phoneme_mode);
int IsVowel(Translator *tr, int letter);
int Unpronouncable(Translator *tr, char *word, int posn);
void ChangeWordStress(Translator *tr, char *word, int new_stress);
void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, int tonic, int control);
void AppendPhonemes(Translator *tr, char *string, int size, const char *ph);
int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, char *end_phonemes, int word_flags, unsigned int *dict_flags);
int TransposeAlphabet(Translator *tr, char *text);
int Lookup(Translator *tr, const char *word, char *ph_out);
int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *flags, int end_flags, WORD_TAB *wtab);
int LookupFlags(Translator *tr, const char *word, unsigned int **flags_out);
int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy);

#ifdef __cplusplus
}
#endif

#endif


+ 2
- 0
src/libespeak-ng/espeak_api.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "compiledict.h"

#include "phoneme.h" #include "phoneme.h"
#include "voice.h" #include "voice.h"
#include "synthesize.h" #include "synthesize.h"

+ 3
- 0
src/libespeak-ng/intonation.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "intonation.h"
#include "synthdata.h"

#include "phoneme.h" #include "phoneme.h"
#include "voice.h" #include "voice.h"
#include "synthesize.h" #include "synthesize.h"

+ 38
- 0
src/libespeak-ng/intonation.h View File

/*
* Copyright (C) 2005 to 2015 by Jonathan Duddington
* email: [email protected]
* Copyright (C) 2015-2018 Reece H. Dunn
* Copyright (C) 2018 Juho Hiltunen
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see: <http://www.gnu.org/licenses/>.
*/

#ifndef ESPEAK_NG_INTONATION_H
#define ESPEAK_NG_INTONATION_H

#include "translate.h"

#ifdef __cplusplus
extern "C"
{
#endif

void CalcPitches(Translator *tr, int clause_type);

#ifdef __cplusplus
}
#endif

#endif


+ 66
- 0
src/libespeak-ng/mbrola.h View File

/*
* Copyright (C) 2005 to 2015 by Jonathan Duddington
* email: [email protected]
* Copyright (C) 2015-2018 Reece H. Dunn
* Copyright (C) 2018 Juho Hiltunen
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see: <http://www.gnu.org/licenses/>.
*/

// declarations for compilembrola.c and synth_mbrola.c

#ifndef ESPEAK_NG_MBROLA_H
#define ESPEAK_NG_MBROLA_H

#include <stdbool.h>

#include "synthesize.h"

#ifdef __cplusplus
extern "C"
{
#endif

typedef struct {
int name;
unsigned int next_phoneme;
int mbr_name;
int mbr_name2;
int percent; // percentage length of first component
int control;
} MBROLA_TAB;

extern int mbrola_delay;
extern char mbrola_name[20];

espeak_ng_STATUS LoadMbrolaTable(const char *mbrola_voice,
const char *phtrans,
int *srate);

int MbrolaGenerate(PHONEME_LIST *phoneme_list,
int *n_ph, bool resume);

int MbrolaFill(int length,
bool resume,
int amplitude);

void MbrolaReset(void);
int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, bool resume, FILE *f_mbrola);

#ifdef __cplusplus
}
#endif

#endif


+ 5
- 0
src/libespeak-ng/numbers.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "dictionary.h"
#include "numbers.h"
#include "readclause.h"
#include "synthdata.h"

#include "phoneme.h" #include "phoneme.h"
#include "voice.h" #include "voice.h"
#include "synthesize.h" #include "synthesize.h"

+ 43
- 0
src/libespeak-ng/numbers.h View File

/*
* Copyright (C) 2005 to 2015 by Jonathan Duddington
* email: [email protected]
* Copyright (C) 2015-2018 Reece H. Dunn
* Copyright (C) 2018 Juho Hiltunen
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see: <http://www.gnu.org/licenses/>.
*/

#ifndef ESPEAK_NG_NUMBERS_H
#define ESPEAK_NG_NUMBERS_H

#ifdef __cplusplus
extern "C"
{
#endif

void LookupAccentedLetter(Translator *tr, unsigned int letter, char *ph_buf);
void LookupLetter(Translator *tr, unsigned int letter, int next_byte, char *ph_buf1, int control);
int IsSuperscript(int letter);
void SetSpellingStress(Translator *tr, char *phonemes, int control, int n_chars);
int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab);
int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, WORD_TAB *wtab, int control);
int TranslateLetter(Translator *tr, char *word, char *phonemes, int control);


#ifdef __cplusplus
}
#endif

#endif


+ 0
- 5
src/libespeak-ng/phoneme.h View File

#define PH(c1, c2) (c2<<8)+c1 // combine two characters into an integer for phoneme name #define PH(c1, c2) (c2<<8)+c1 // combine two characters into an integer for phoneme name
#define PH3(c1, c2, c3) (c3<<16)+(c2<<8)+c1 #define PH3(c1, c2, c3) (c3<<16)+(c2<<8)+c1
#define PhonemeCode2(c1, c2) PhonemeCode((c2<<8)+c1) #define PhonemeCode2(c1, c2) PhonemeCode((c2<<8)+c1)
int LookupPhonemeString(const char *string);
int PhonemeCode(unsigned int mnem);

const char *EncodePhonemes(const char *p, char *outptr, int *bad_phoneme);
void DecodePhonemes(const char *inptr, char *outptr);


extern const char *WordToString(unsigned int word); extern const char *WordToString(unsigned int word);



+ 3
- 0
src/libespeak-ng/phonemelist.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "phonemelist.h"
#include "synthdata.h"

#include "phoneme.h" #include "phoneme.h"
#include "voice.h" #include "voice.h"
#include "synthesize.h" #include "synthesize.h"

+ 38
- 0
src/libespeak-ng/phonemelist.h View File

/*
* Copyright (C) 2005 to 2015 by Jonathan Duddington
* email: [email protected]
* Copyright (C) 2015-2018 Reece H. Dunn
* Copyright (C) 2018 Juho Hiltunen
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see: <http://www.gnu.org/licenses/>.
*/

#ifndef ESPEAK_NG_PHONEMELIST_H
#define ESPEAK_NG_PHONEMELIST_H

#include "translate.h"

#ifdef __cplusplus
extern "C"
{
#endif

#ifdef __cplusplus
}
#endif

void MakePhonemeList(Translator *tr, int post_pause, bool start_sentence);

#endif


+ 4
- 0
src/libespeak-ng/readclause.c View File

#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>
#include <ucd/ucd.h> #include <ucd/ucd.h>


#include "dictionary.h"
#include "readclause.h"
#include "synthdata.h"

#include "error.h" #include "error.h"
#include "speech.h" #include "speech.h"
#include "phoneme.h" #include "phoneme.h"

+ 61
- 0
src/libespeak-ng/readclause.h View File

/*
* Copyright (C) 2005 to 2015 by Jonathan Duddington
* email: [email protected]
* Copyright (C) 2015-2018 Reece H. Dunn
* Copyright (C) 2018 Juho Hiltunen
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see: <http://www.gnu.org/licenses/>.
*/
#ifndef ESPEAK_NG_READCLAUSE_H
#define ESPEAK_NG_READCLAUSE_H

#include "translate.h"

#ifdef __cplusplus
extern "C"
{
#endif

typedef struct {
int type;
int parameter[N_SPEECH_PARAM];
} PARAM_STACK;

extern PARAM_STACK param_stack[];
extern const int param_defaults[N_SPEECH_PARAM];

int clause_type_from_codepoint(uint32_t c);
int towlower2(unsigned int c); // Supports Turkish I
int Eof(void);
const char *WordToString2(unsigned int word);
int Read4Bytes(FILE *f);
int LoadSoundFile2(const char *fname);
int AddNameData(const char *name,
int wide);
int ReadClause(Translator *tr,
char *buf,
short *charix,
int *charix_top,
int n_buf,
int *tone_type,
char *voice_change);



#ifdef __cplusplus
}
#endif

#endif


+ 5
- 0
src/libespeak-ng/setlengths.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "readclause.h"
#include "setlengths.h"
#include "synthdata.h"
#include "wavegen.h"

#include "phoneme.h" #include "phoneme.h"
#include "voice.h" #include "voice.h"
#include "synthesize.h" #include "synthesize.h"

+ 38
- 0
src/libespeak-ng/setlengths.h View File

/*
* Copyright (C) 2005 to 2015 by Jonathan Duddington
* email: [email protected]
* Copyright (C) 2015-2018 Reece H. Dunn
* Copyright (C) 2018 Juho Hiltunen
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see: <http://www.gnu.org/licenses/>.
*/

#ifndef ESPEAK_NG_SETLENGTHS_H
#define ESPEAK_NG_SETLENGTHS_H

#include "translate.h"

#ifdef __cplusplus
extern "C"
{
#endif

void CalcLengths(Translator *tr);

#ifdef __cplusplus
}
#endif

#endif


+ 3
- 0
src/libespeak-ng/spect.h View File

#define ESPEAK_NG_SPECT_H #define ESPEAK_NG_SPECT_H


#include <espeak-ng/espeak_ng.h> #include <espeak-ng/espeak_ng.h>

#include "wavegen.h"

#include "synthesize.h" #include "synthesize.h"
#include "speech.h" #include "speech.h"



+ 6
- 0
src/libespeak-ng/speech.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "dictionary.h"
#include "mbrola.h"
#include "readclause.h"
#include "synthdata.h"
#include "wavegen.h"

#include "speech.h" #include "speech.h"
#include "phoneme.h" #include "phoneme.h"
#include "voice.h" #include "voice.h"

+ 2
- 0
src/libespeak-ng/speech.h View File



#include <espeak-ng/espeak_ng.h> #include <espeak-ng/espeak_ng.h>


#include "mbrola.h"

#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
{ {

+ 2
- 0
src/libespeak-ng/ssml.c View File

#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>
#include <ucd/ucd.h> #include <ucd/ucd.h>


#include "readclause.h"

#include "error.h" #include "error.h"
#include "speech.h" #include "speech.h"
#include "phoneme.h" #include "phoneme.h"

+ 0
- 5
src/libespeak-ng/ssml.h View File

#define HTML_NOSPACE 16 // don't insert a space for this element, so it doesn't break a word #define HTML_NOSPACE 16 // don't insert a space for this element, so it doesn't break a word
#define SSML_CLOSE 0x20 // for a closing tag, OR this with the tag type #define SSML_CLOSE 0x20 // for a closing tag, OR this with the tag type


int LoadSoundFile2(const char *fname);

int AddNameData(const char *name,
int wide);

int ProcessSsmlTag(wchar_t *xml_buf, int ProcessSsmlTag(wchar_t *xml_buf,
char *outbuf, char *outbuf,
int *outix, int *outix,

+ 11
- 1
src/libespeak-ng/synth_mbrola.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "dictionary.h"
#include "mbrola.h"
#include "readclause.h"
#include "synthdata.h"
#include "wavegen.h"


#include "speech.h" #include "speech.h"
#include "phoneme.h" #include "phoneme.h"
#include "voice.h" #include "voice.h"
#include "synthesize.h" #include "synthesize.h"
#include "translate.h" #include "translate.h"


// included here so tests can find these even without OPT_MBROLA set
int mbrola_delay;
char mbrola_name[20];

#ifdef INCLUDE_MBROLA #ifdef INCLUDE_MBROLA


extern int Read4Bytes(FILE *f);
extern unsigned char *outbuf; extern unsigned char *outbuf;


#if defined(_WIN32) || defined(_WIN64) #if defined(_WIN32) || defined(_WIN64)

+ 3
- 0
src/libespeak-ng/synthdata.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "readclause.h"
#include "synthdata.h"

#include "error.h" #include "error.h"
#include "speech.h" #include "speech.h"
#include "phoneme.h" #include "phoneme.h"

+ 63
- 0
src/libespeak-ng/synthdata.h View File

/*
* Copyright (C) 2005 to 2015 by Jonathan Duddington
* email: [email protected]
* Copyright (C) 2015-2018 Reece H. Dunn
* Copyright (C) 2018 Juho Hiltunen
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see: <http://www.gnu.org/licenses/>.
*/

#ifndef ESPEAK_NG_SYNTHDATA_H
#define ESPEAK_NG_SYNTHDATA_H

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

#ifdef __cplusplus
extern "C"
{
#endif

void InterpretPhoneme(Translator *tr,
int control,
PHONEME_LIST *plist,
PHONEME_DATA *phdata,
WORD_PH_DATA *worddata);

void InterpretPhoneme2(int phcode,
PHONEME_DATA *phdata);

void FreePhData(void);
unsigned char *GetEnvelope(int index);
espeak_ng_STATUS LoadPhData(int *srate, espeak_ng_ERROR_CONTEXT *context);
void LoadConfig(void);
int LookupPhonemeString(const char *string);
int LookupPhonemeTable(const char *name);
frameref_t *LookupSpect(PHONEME_TAB *this_ph,
int which,
FMT_PARAMS *fmt_params,
int *n_frames,
PHONEME_LIST *plist);

int NumInstnWords(unsigned short *prog);
int PhonemeCode(unsigned int mnem);
void SelectPhonemeTable(int number);
int SelectPhonemeTableName(const char *name);

#ifdef __cplusplus
}
#endif

#endif


+ 7
- 3
src/libespeak-ng/synthesize.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "dictionary.h"
#include "intonation.h"
#include "mbrola.h"
#include "setlengths.h"
#include "synthdata.h"
#include "wavegen.h"

#include "phoneme.h" #include "phoneme.h"
#include "voice.h" #include "voice.h"
#include "synthesize.h" #include "synthesize.h"
int n_phoneme_list = 0; int n_phoneme_list = 0;
PHONEME_LIST phoneme_list[N_PHONEME_LIST+1]; PHONEME_LIST phoneme_list[N_PHONEME_LIST+1];


int mbrola_delay;
char mbrola_name[20];

SPEED_FACTORS speed; SPEED_FACTORS speed;


static int last_pitch_cmd; static int last_pitch_cmd;

+ 0
- 61
src/libespeak-ng/synthesize.h View File



#define N_PHONEME_LIST 1000 // enough for source[N_TR_SOURCE] full of text, else it will truncate #define N_PHONEME_LIST 1000 // enough for source[N_TR_SOURCE] full of text, else it will truncate


#define MAX_HARMONIC 400 // 400 * 50Hz = 20 kHz, more than enough
#define N_SEQ_FRAMES 25 // max frames in a spectrum sequence (real max is ablut 8) #define N_SEQ_FRAMES 25 // max frames in a spectrum sequence (real max is ablut 8)
#define STEPSIZE 64 // 2.9mS at 22 kHz sample rate #define STEPSIZE 64 // 2.9mS at 22 kHz sample rate


unsigned char klattp[5]; // AV, FNZ, Tilt, Aspr, Skew unsigned char klattp[5]; // AV, FNZ, Tilt, Aspr, Skew
} frame_t2; // without the extra Klatt parameters } frame_t2; // without the extra Klatt parameters


// formant data used by wavegen
typedef struct {
int freq; // Hz<<16
int height; // height<<15
int left; // Hz<<16
int right; // Hz<<16
double freq1; // floating point versions of the above
double height1;
double left1;
double right1;
double freq_inc; // increment by this every 64 samples
double height_inc;
double left_inc;
double right_inc;
} wavegen_peaks_t;

typedef struct { typedef struct {
unsigned char *pitch_env; unsigned char *pitch_env;
int pitch; // pitch Hz*256 int pitch; // pitch Hz*256
char *filename; char *filename;
} SOUND_ICON; } SOUND_ICON;


typedef struct {
int name;
unsigned int next_phoneme;
int mbr_name;
int mbr_name2;
int percent; // percentage length of first component
int control;
} MBROLA_TAB;

typedef struct { typedef struct {
int pause_factor; int pause_factor;
int clause_pause_factor; int clause_pause_factor;
extern int wcmdq_head; extern int wcmdq_head;
extern int wcmdq_tail; extern int wcmdq_tail;


// from Wavegen file
int WcmdqFree(void);
void WcmdqStop(void);
int WcmdqUsed(void);
void WcmdqInc(void);
void WavegenInit(int rate, int wavemult_fact);
int WavegenFill(void);
void MarkerEvent(int type, unsigned int char_position, int value, int value2, unsigned char *out_ptr); void MarkerEvent(int type, unsigned int char_position, int value, int value2, unsigned char *out_ptr);
int GetAmplitude(void);
void SetPitch2(voice_t *voice, int pitch1, int pitch2, int *pitch_base, int *pitch_range);
int PeaksToHarmspect(wavegen_peaks_t *peaks, int pitch, int *htab, int control);


extern unsigned char *wavefile_data; extern unsigned char *wavefile_data;
extern int samplerate; extern int samplerate;
extern int echo_amp; extern int echo_amp;
extern short echo_buf[N_ECHO_BUF]; extern short echo_buf[N_ECHO_BUF];


extern int mbrola_delay;
extern char mbrola_name[20];

// from synthdata file
unsigned int LookupSound(PHONEME_TAB *ph1, PHONEME_TAB *ph2, int which, int *match_level, int control);
frameref_t *LookupSpect(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, int *n_frames, PHONEME_LIST *plist);
void FreePhData(void);

unsigned char *LookupEnvelope(int ix);
espeak_ng_STATUS LoadPhData(int *srate, espeak_ng_ERROR_CONTEXT *context);

void SynthesizeInit(void); void SynthesizeInit(void);
int Generate(PHONEME_LIST *phoneme_list, int *n_ph, bool resume); int Generate(PHONEME_LIST *phoneme_list, int *n_ph, bool resume);
void MakeWave2(PHONEME_LIST *p, int n_ph); void MakeWave2(PHONEME_LIST *p, int n_ph);
int SpeakNextClause(int control); int SpeakNextClause(int control);
void SetSpeed(int control); void SetSpeed(int control);
void SetEmbedded(int control, int value); void SetEmbedded(int control, int value);
void SelectPhonemeTable(int number);
int SelectPhonemeTableName(const char *name);
int FormantTransition2(frameref_t *seq, int *n_frames, unsigned int data1, unsigned int data2, PHONEME_TAB *other_ph, int which); int FormantTransition2(frameref_t *seq, int *n_frames, unsigned int data1, unsigned int data2, PHONEME_TAB *other_ph, int which);


void Write4Bytes(FILE *f, int value); void Write4Bytes(FILE *f, int value);
int Read4Bytes(FILE *f);
int Reverse4Bytes(int word);


#if HAVE_SONIC_H #if HAVE_SONIC_H
void DoSonicSpeed(int value); void DoSonicSpeed(int value);
extern int n_soundicon_tab; extern int n_soundicon_tab;
extern SOUND_ICON soundicon_tab[N_SOUNDICON_TAB]; extern SOUND_ICON soundicon_tab[N_SOUNDICON_TAB];


espeak_ng_STATUS LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int *srate);
espeak_ng_STATUS SetParameter(int parameter, int value, int relative); espeak_ng_STATUS SetParameter(int parameter, int value, int relative);
int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, bool resume, FILE *f_mbrola);
int MbrolaGenerate(PHONEME_LIST *phoneme_list, int *n_ph, bool resume);
int MbrolaFill(int length, bool resume, int amplitude);
void MbrolaReset(void);
void DoEmbedded(int *embix, int sourceix); void DoEmbedded(int *embix, int sourceix);
void DoMarker(int type, int char_posn, int length, int value); void DoMarker(int type, int char_posn, int length, int value);
void DoPhonemeMarker(int type, int char_posn, int length, char *name); void DoPhonemeMarker(int type, int char_posn, int length, char *name);
int DoSample3(PHONEME_DATA *phdata, int length_mod, int amp); 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 DoSpect2(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, PHONEME_LIST *plist, int modulation);
int PauseLength(int pause, int control); int PauseLength(int pause, int control);
int LookupPhonemeTable(const char *name);
unsigned char *GetEnvelope(int index);
int NumInstnWords(unsigned short *prog);

void InitBreath(void);


#ifdef __cplusplus #ifdef __cplusplus
} }

+ 6
- 0
src/libespeak-ng/translate.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "dictionary.h"
#include "numbers.h"
#include "phonemelist.h"
#include "readclause.h"
#include "synthdata.h"

#include "speech.h" #include "speech.h"
#include "phoneme.h" #include "phoneme.h"
#include "voice.h" #include "voice.h"

+ 0
- 50
src/libespeak-ng/translate.h View File

#include <espeak-ng/espeak_ng.h> #include <espeak-ng/espeak_ng.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "synthesize.h"

#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
{ {
#define CLAUSE_COLON (30 | CLAUSE_INTONATION_FULL_STOP | CLAUSE_TYPE_CLAUSE) #define CLAUSE_COLON (30 | CLAUSE_INTONATION_FULL_STOP | CLAUSE_TYPE_CLAUSE)
#define CLAUSE_SEMICOLON (30 | CLAUSE_INTONATION_COMMA | CLAUSE_TYPE_CLAUSE) #define CLAUSE_SEMICOLON (30 | CLAUSE_INTONATION_COMMA | CLAUSE_TYPE_CLAUSE)


int clause_type_from_codepoint(uint32_t c);

//@} //@}


#define SAYAS_CHARS 0x12 #define SAYAS_CHARS 0x12
unsigned char length; unsigned char length;
} WORD_TAB; } WORD_TAB;


typedef struct {
int type;
int parameter[N_SPEECH_PARAM];
} PARAM_STACK;

extern PARAM_STACK param_stack[];
extern const int param_defaults[N_SPEECH_PARAM];

typedef struct { typedef struct {
const char *name; const char *name;
int offset; int offset;
extern int (*phoneme_callback)(const char *); extern int (*phoneme_callback)(const char *);
extern void SetLengthMods(Translator *tr, int value); extern void SetLengthMods(Translator *tr, int value);


void LoadConfig(void);
int TransposeAlphabet(Translator *tr, char *text);

#define LEADING_2_BITS 0xC0 // 0b11000000 #define LEADING_2_BITS 0xC0 // 0b11000000
#define UTF8_TAIL_BITS 0x80 // 0b10000000 #define UTF8_TAIL_BITS 0x80 // 0b10000000




int lookupwchar(const unsigned short *list, int c); int lookupwchar(const unsigned short *list, int c);
int lookupwchar2(const unsigned short *list, int c); int lookupwchar2(const unsigned short *list, int c);
int Eof(void);
char *strchr_w(const char *s, int c); char *strchr_w(const char *s, int c);
int IsBracket(int c); int IsBracket(int c);
void InitNamedata(void); void InitNamedata(void);
int IsDigit(unsigned int c); int IsDigit(unsigned int c);
int IsDigit09(unsigned int c); int IsDigit09(unsigned int c);
int IsAlpha(unsigned int c); int IsAlpha(unsigned int c);
int IsVowel(Translator *tr, int c);
int IsSuperscript(int letter);
int isspace2(unsigned int c); int isspace2(unsigned int c);
int towlower2(unsigned int c); // Supports Turkish I
const char *GetTranslatedPhonemeString(int phoneme_mode);
const char *WordToString2(unsigned int word);
ALPHABET *AlphabetFromChar(int c); ALPHABET *AlphabetFromChar(int c);


Translator *SelectTranslator(const char *name); Translator *SelectTranslator(const char *name);
int SetTranslator2(const char *name); int SetTranslator2(const char *name);
void DeleteTranslator(Translator *tr); void DeleteTranslator(Translator *tr);
void ProcessLanguageOptions(LANGUAGE_OPTIONS *langopts); void ProcessLanguageOptions(LANGUAGE_OPTIONS *langopts);
int Lookup(Translator *tr, const char *word, char *ph_out);
int LookupFlags(Translator *tr, const char *word, unsigned int **flags_out);

int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, WORD_TAB *wtab, int control);
int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab);

void ChangeWordStress(Translator *tr, char *word, int new_stress);
void SetSpellingStress(Translator *tr, char *phonemes, int control, int n_chars);
int TranslateLetter(Translator *tr, char *letter, char *phonemes, int control);
void LookupLetter(Translator *tr, unsigned int letter, int next_byte, char *ph_buf, int control);
void LookupAccentedLetter(Translator *tr, unsigned int letter, char *ph_buf);

int LoadDictionary(Translator *tr, const char *name, int no_error);
int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *flags, int end_flags, WORD_TAB *wtab);
int HashDictionary(const char *string);


void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len); void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len);
char *DecodeRule(const char *group_chars, int group_length, char *rule, int control);


void MakePhonemeList(Translator *tr, int post_pause, bool new_sentence);
void ApplySpecialAttribute2(Translator *tr, char *phonemes, int dict_flags); void ApplySpecialAttribute2(Translator *tr, char *phonemes, int dict_flags);
void AppendPhonemes(Translator *tr, char *string, int size, const char *ph);

void CalcLengths(Translator *tr);
void CalcPitches(Translator *tr, int clause_tone);


int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy);
int Unpronouncable(Translator *tr, char *word, int posn);
void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, int tonic, int prev_stress);
int TranslateRules(Translator *tr, char *p, char *phonemes, int size, char *end_phonemes, int end_flags, unsigned int *dict_flags);
int TranslateWord(Translator *tr, char *word1, WORD_TAB *wtab, char *word_out); int TranslateWord(Translator *tr, char *word1, WORD_TAB *wtab, char *word_out);
void TranslateClause(Translator *tr, int *tone, char **voice_change); void TranslateClause(Translator *tr, int *tone, char **voice_change);
int ReadClause(Translator *tr, char *buf, short *charix, int *charix_top, int n_buf, int *tone_type, char *voice_change);


void SetVoiceStack(espeak_VOICE *v, const char *variant_name); void SetVoiceStack(espeak_VOICE *v, const char *variant_name);
void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_DATA *phdata, WORD_PH_DATA *worddata);
void InterpretPhoneme2(int phcode, PHONEME_DATA *phdata);
char *WritePhMnemonic(char *phon_out, PHONEME_TAB *ph, PHONEME_LIST *plist, int use_ipa, int *flags);


extern FILE *f_trans; // for logging extern FILE *f_trans; // for logging



+ 5
- 0
src/libespeak-ng/voices.c View File

#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "dictionary.h"
#include "readclause.h"
#include "synthdata.h"
#include "wavegen.h"

#include "speech.h" #include "speech.h"
#include "phoneme.h" #include "phoneme.h"
#include "voice.h" #include "voice.h"

+ 4
- 1
src/libespeak-ng/wavegen.c View File

#include <espeak-ng/espeak_ng.h> #include <espeak-ng/espeak_ng.h>
#include <espeak-ng/speak_lib.h> #include <espeak-ng/speak_lib.h>


#include "wavegen.h"

#include "synthesize.h" #include "synthesize.h"
#include "speech.h" #include "speech.h"
#include "phoneme.h" #include "phoneme.h"
static int harm_sqrt_n = 0; static int harm_sqrt_n = 0;


#define N_LOWHARM 30 #define N_LOWHARM 30
#define MAX_HARMONIC 400 // 400 * 50Hz = 20 kHz, more than enough
static int harm_inc[N_LOWHARM]; // only for these harmonics do we interpolate amplitude between steps static int harm_inc[N_LOWHARM]; // only for these harmonics do we interpolate amplitude between steps
static int *harmspect; static int *harmspect;
static int hswitch = 0; static int hswitch = 0;
#endif #endif


// Call WavegenFill2, and then speed up the output samples. // Call WavegenFill2, and then speed up the output samples.
int WavegenFill()
int WavegenFill(void)
{ {
int finished; int finished;
unsigned char *p_start; unsigned char *p_start;

+ 76
- 0
src/libespeak-ng/wavegen.h View File

/*
* Copyright (C) 2005 to 2015 by Jonathan Duddington
* email: [email protected]
* Copyright (C) 2015-2018 Reece H. Dunn
* Copyright (C) 2018 Juho Hiltunen
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see: <http://www.gnu.org/licenses/>.
*/

#ifndef ESPEAK_NG_WAVEGEN_H
#define ESPEAK_NG_WAVEGEN_H

#include "voice.h"

#ifdef __cplusplus
extern "C"
{
#endif

typedef struct {
int freq; // Hz<<16
int height; // height<<15
int left; // Hz<<16
int right; // Hz<<16
double freq1; // floating point versions of the above
double height1;
double left1;
double right1;
double freq_inc; // increment by this every 64 samples
double height_inc;
double left_inc;
double right_inc;
} wavegen_peaks_t;


int GetAmplitude(void);
void InitBreath(void);
int PeaksToHarmspect(wavegen_peaks_t *peaks,
int pitch,
int *htab,
int control);

void SetPitch2(voice_t *voice,
int pitch1,
int pitch2,
int *pitch_base,
int *pitch_range);

void WavegenInit(int rate,
int wavemult_fact);


int WavegenFill(void);
void WavegenSetVoice(voice_t *v);
int WcmdqFree(void);
void WcmdqStop(void);
int WcmdqUsed(void);
void WcmdqInc(void);

#ifdef __cplusplus
}
#endif

#endif


+ 1
- 0
tests/readclause.c View File

#include <espeak-ng/espeak_ng.h> #include <espeak-ng/espeak_ng.h>
#include <espeak-ng/encoding.h> #include <espeak-ng/encoding.h>


#include "readclause.h"
#include "speech.h" #include "speech.h"
#include "phoneme.h" #include "phoneme.h"
#include "voice.h" #include "voice.h"

Loading…
Cancel
Save