Browse Source

[1.25.3] espeak_SetVoiceByName() didn't set current_voice correctly when voice is specified by filename.

Added ResetLetterBits() to clear data before using SetLetterBits().


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@19 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 18 years ago
parent
commit
e40539b00b

+ 13
- 0
dictsource/dict_phonemes View File

b c d f g h j k b c d f g h j k
l m n N p r s t l m n N p r s t
tS v w z tS v w z


Dictionary is_dict

& @- a aI aU e E eI
i I o O oU u W y
Yy

* : ; b c C d D
f g h j J k l L
l# m m# n N n# N# n^
n^# p Q r r# s S t
T tl# v x z

+ 3
- 1
dictsource/el_rules View File

// Α α, Β β, Γ γ, Δ δ, Ε ε, Ζ ζ, Η η, Θ θ, Ι ι, Κ κ, Λ λ, Μ μ, Ν ν, Ξ ξ, // Α α, Β β, Γ γ, Δ δ, Ε ε, Ζ ζ, Η η, Θ θ, Ι ι, Κ κ, Λ λ, Μ μ, Ν ν, Ξ ξ,
// Ο ο, Π π, Ρ ρ, Σ σ ς (word-final form), Τ τ, Υ υ, Φ φ, Χ χ, Ψ ψ, Ω ω. // Ο ο, Π π, Ρ ρ, Σ σ ς (word-final form), Τ τ, Υ υ, Φ φ, Χ χ, Ψ ψ, Ω ω.


// Y: ε η ι υ (+tonos variants, front vowels).
// Letter group B: θ κ ξ π ς σ τ φ χ (voiceless consonants)
// Letter group Y: ε η ι υ έ ή ί ύ (front vowels).




.group α .group α
δ D δ D
δ (δ δ (δ



.group ε .group ε
ε e ε e
ει i ει i

+ 9
- 7
phsource/compile_report View File

el 8 112 el 8 112
sv 25 114 sv 25 114
no 29 118 no 29 118
is 27 113
is 32 117
vi 41 129 vi 41 129
zh_yue 32 120 zh_yue 32 120
sw 14 101 sw 14 101
1 n^/_n^ base 1 n^/_n^ base
1 n^/n^_ base 1 n^/n^_ base
1 n^/n^@ base 1 n^/n^@ base
1 n^/n^#_ is
6 n/_n base ro 6 n/_n base ro
3 n/n_ base ro 3 n/n_ base ro
1 n/n@ base 1 n/n@ base
1 ufric/sx_sv sv 1 ufric/sx_sv sv
1 ufric/th base 1 ufric/th base
1 ufric/th_ base 1 ufric/th_ base
1 ufric/tl# is
2 ufric/x base vi 2 ufric/x base vi
4 ufric/x2 af nl pt 4 ufric/x2 af nl pt
1 ufric/x_hr hr 1 ufric/x_hr hr
1 ustop/c base 1 ustop/c base
5 ustop/k base en fr hi sw 5 ustop/k base en fr hi sw
9 ustop/k_ base en fi fr hi hu it el sw 9 ustop/k_ base en fi fr hi hu it el sw
11 ustop/ki base en af fi fr hi hu it sw
12 ustop/ki base en af fi fr hi hu it is sw
10 ustop/kl base en fi fr hi hu it el sw 10 ustop/kl base en fi fr hi hu it el sw
11 ustop/kr base en fi fr hi hu it el sw 11 ustop/kr base en fi fr hi hu it el sw
9 ustop/k_unasp base fi hi hu it el 9 ustop/k_unasp base fi hi hu it el
2 vdiph/ooi_3 en_wm hr 2 vdiph/ooi_3 en_wm hr
2 vdiph/ou fi zh_yue 2 vdiph/ou fi zh_yue
2 vdiph/ou_2 sk ro 2 vdiph/ou_2 sk ro
1 vdiph/ou_3 is
2 vdiph/ou_3 is
1 vdiph/@u en_wm 1 vdiph/@u en_wm
1 vdiph/@u_2 en_rp 1 vdiph/@u_2 en_rp
1 vdiph/@u_3 ro 1 vdiph/@u_3 ro
2 voc/Q base 2 voc/Q base
4 voc/Q_ base nl pt 4 voc/Q_ base nl pt
2 voc/Q_less nl pt 2 voc/Q_less nl pt
5 voc/v base fi hi nl ro
6 voc/v_ base fi hi nl ro
6 voc/v base fi hi nl ro is
7 voc/v_ base fi hi nl ro is
4 vocw/dh base es 4 vocw/dh base es
2 vocw/Q base 2 vocw/Q base
3 vocw/Q_ base nl 3 vocw/Q_ base nl
20 x/b base hi ro is 20 x/b base hi ro is
2 x/b_ base is 2 x/b_ base is
9 x/d base hi hr el is 9 x/d base hi hr el is
15 x/d_ base fi fr hi hu pl hr ru it ro el is ++
22 x/d_dnt base fi fr hi hu pl ru it ro sw
14 x/d_ base fi fr hi pl hr ru it ro el is sw
23 x/d_dnt base fi fr hi hu pl ru it ro sw
6 x/d_pzd pl ru 6 x/d_pzd pl ru
3 x/dzh base hi 3 x/dzh base hi
5 x/dzh_ base hi ru 5 x/dzh_ base hi ru

BIN
phsource/n/n#_ View File


BIN
phsource/n^/n^#_ View File


BIN
phsource/nn/nn#_ View File


+ 1
- 1
phsource/ph_hungarian View File

vowelin f1=2 f2=1500 -300 300 f3=-150 80 vowelin f1=2 f2=1500 -300 300 f3=-150 80
vowelout f1=2 f2=1500 -300 300 f3=-150 80 vowelout f1=2 f2=1500 -300 300 f3=-150 80
formants d/d+x/d_dnt%110 formants d/d+x/d_dnt%110
before _ d/d_+x/d_
before _ d/d_+x/d_dnt%80
before r d/dr+x/d_dnt%110 before r d/dr+x/d_dnt%110
after _ NULL after _ NULL
after @ d/xd after @ d/xd

+ 15
- 0
src/dictionary.cpp View File

tr->letter_bits[c] = 0x81; // group 0 only tr->letter_bits[c] = 0x81; // group 0 only
} }


void ResetLetterBits(Translator *tr, int groups)
{//=============================================
// Clear all the specified groups
unsigned int ix;
unsigned int mask;

mask = ~groups;

for(ix=0; ix<sizeof(tr->letter_bits); ix++)
{
tr->letter_bits[ix] &= mask;
}
}


void SetLetterBits(Translator *tr, int group, const char *string) void SetLetterBits(Translator *tr, int group, const char *string)
{//============================================================== {//==============================================================
int bits; int bits;

+ 5
- 1
src/extras.cpp View File

unsigned int ix=0; unsigned int ix=0;
char textbuf[2000]; char textbuf[2000];
espeak_VOICE voice; espeak_VOICE voice;
espeak_VOICE *voice2;


//FindPhonemesUsed(); //FindPhonemesUsed();
//return; //return;
voice.gender = 0; voice.gender = 0;
voice.age = 0; voice.age = 0;
voice.variant = 0; voice.variant = 0;
espeak_SetVoiceByName("en");
ix = espeak_SetVoiceByName("pt-xx");

voice2 = espeak_GetCurrentVoice();

// espeak_SetVoiceByProperties(&voice); // espeak_SetVoiceByProperties(&voice);
espeak_SetParameter(espeakRANGE,0,0); espeak_SetParameter(espeakRANGE,0,0);
espeak_Synth(textbuf,ix+1,0,POS_CHARACTER,0,espeakCHARS_8BIT+espeakSSML,NULL,NULL); espeak_Synth(textbuf,ix+1,0,POS_CHARACTER,0,espeakCHARS_8BIT+espeakSSML,NULL,NULL);

+ 1
- 1
src/synthdata.cpp View File

#include "translate.h" #include "translate.h"
#include "wave.h" #include "wave.h"


const char *version_string = "1.25.02 21.May.07";
const char *version_string = "1.25.03 22.May.07";
const int version_phdata = 0x012501; const int version_phdata = 0x012501;


int option_device_number = -1; int option_device_number = -1;

+ 1
- 1
src/synthesize.cpp View File

modified = 0; modified = 0;


if(frame->frflags & FRFLAG_FORMANT_RATE) if(frame->frflags & FRFLAG_FORMANT_RATE)
len = (len * 13)/10; // allow slightly greater rate of change for this frame (was 12/10)
len = (len * 12)/10; // allow slightly greater rate of change for this frame (was 12/10)


for(pk=0; pk<6; pk++) for(pk=0; pk<6; pk++)
{ {

+ 10
- 6
src/tr_languages.cpp View File



// character codes offset by 0x380 // character codes offset by 0x380
static const char el_vowels[] = {0x10,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x35,0x37,0x39,0x3f,0x45,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0}; static const char el_vowels[] = {0x10,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x35,0x37,0x39,0x3f,0x45,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0};
static const char el_fvowels[] = {0x2d,0x2e,0x2f,0x35,0x37,0x39,0x45,0x4d,0};
static const char el_voiceless[]= {0x38,0x3a,0x3f,0x40,0x42,0x43,0x44,0x46,0x47,0};
static const char el_fvowels[] = {0x2d,0x2e,0x2f,0x35,0x37,0x39,0x45,0x4d,0}; // ε η ι υ έ ή ί ύ
static const char el_voiceless[]= {0x38,0x3a,0x3e,0x40,0x42,0x43,0x44,0x46,0x47,0}; // θ κ ξ π ς σ τ φ χ
static const char el_consonants[]={0x32,0x33,0x34,0x36,0x38,0x3a,0x3b,0x3c,0x3d,0x3e,0x40,0x41,0x42,0x43,0x44,0x46,0x47,0x48,0}; static const char el_consonants[]={0x32,0x33,0x34,0x36,0x38,0x3a,0x3b,0x3c,0x3d,0x3e,0x40,0x41,0x42,0x43,0x44,0x46,0x47,0x48,0};
static const wchar_t el_char_apostrophe[] = {0x3c3,0}; // σ static const wchar_t el_char_apostrophe[] = {0x3c3,0}; // σ


tr->letter_bits_offset = OFFSET_DEVANAGARI; tr->letter_bits_offset = OFFSET_DEVANAGARI;
tr->langopts.replace_chars = replace_chars_hi; tr->langopts.replace_chars = replace_chars_hi;
tr->langopts.replacement_chars = replacement_chars_hi; tr->langopts.replacement_chars = replacement_chars_hi;

memset(tr->letter_bits,0,sizeof(tr->letter_bits));
SetLetterBitsRange(tr,LETTERGP_A,0x06,0x14); // vowel letters SetLetterBitsRange(tr,LETTERGP_A,0x06,0x14); // vowel letters
SetLetterBitsRange(tr,LETTERGP_B,0x3e,0x4d); // vowel signs + virama SetLetterBitsRange(tr,LETTERGP_B,0x3e,0x4d); // vowel signs + virama
SetLetterBitsRange(tr,LETTERGP_C,0x15,0x39); // the main consonant range SetLetterBitsRange(tr,LETTERGP_C,0x15,0x39); // the main consonant range
case L('h','u'): // Hungarian case L('h','u'): // Hungarian
{ {
static int stress_amps_hu[8] = {16,16, 20,20, 20,24, 24,22 }; static int stress_amps_hu[8] = {16,16, 20,20, 20,24, 24,22 };
static int stress_lengths_hu[8] = {180,150, 200,180, 0,0, 230,270};
static int stress_lengths_hu[8] = {180,160, 200,180, 0,0, 230,270};
static const wchar_t replace_chars_hu[] = {0xd4,0xf4,0xdb,0xfb,0}; static const wchar_t replace_chars_hu[] = {0xd4,0xf4,0xdb,0xfb,0};
static const unsigned int replacement_chars_hu[] = {0x150,0x151,0x170,0x171,0}; // allow o,u-circumflex for o,u-double-acute static const unsigned int replacement_chars_hu[] = {0x150,0x151,0x170,0x171,0}; // allow o,u-circumflex for o,u-double-acute


tr->langopts.replacement_chars = replacement_chars_hu; tr->langopts.replacement_chars = replacement_chars_hu;


tr->langopts.stress_rule = 0; tr->langopts.stress_rule = 0;
tr->langopts.stress_flags = 0x56; // move secondary stress from light to a following heavy syllable
tr->langopts.stress_flags = 0x16; // move secondary stress from light to a following heavy syllable
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x1; tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x1;
tr->langopts.param[LOPT_IT_DOUBLING] = 1; tr->langopts.param[LOPT_IT_DOUBLING] = 1;
tr->langopts.long_stop = 130; tr->langopts.long_stop = 130;
case L('i','s'): // Icelandic case L('i','s'): // Icelandic
{ {
static int stress_amps_is[] = {16,16, 20,20, 20,24, 24,22 }; static int stress_amps_is[] = {16,16, 20,20, 20,24, 24,22 };
static int stress_lengths_is[8] = {180,140, 200,200, 0,0, 240,260};
static const wchar_t is_L08[] = {'c','f','h','k','p','s','t','x',0xfe,0}; // voiceless conants, including 'þ'
static int stress_lengths_is[8] = {180,160, 200,200, 0,0, 240,260};
static const wchar_t is_L08[] = {'c','f','h','k','p','t','x',0xfe,0}; // voiceless conants, including 'þ' ?? 's'


tr = new Translator(); tr = new Translator();
SetupTranslator(tr,stress_lengths_is,stress_amps_is); SetupTranslator(tr,stress_lengths_is,stress_amps_is);
tr->langopts.stress_rule = 1; tr->langopts.stress_rule = 1;
tr->langopts.param[LOPT_IT_LENGTHEN] = 0x11; // remove lengthen indicator from unstressed vowels tr->langopts.param[LOPT_IT_LENGTHEN] = 0x11; // remove lengthen indicator from unstressed vowels


ResetLetterBits(tr,0x18);
SetLetterBits(tr,4,"kpst"); // Letter group F SetLetterBits(tr,4,"kpst"); // Letter group F
SetLetterBits(tr,3,"jvr"); // Letter group H SetLetterBits(tr,3,"jvr"); // Letter group H
tr->letter_groups[8] = is_L08; tr->letter_groups[8] = is_L08;


SetLetterVowel(tr,'y'); SetLetterVowel(tr,'y');
SetLetterVowel(tr,'r'); SetLetterVowel(tr,'r');
ResetLetterBits(tr,0x2);
SetLetterBits(tr,5,sk_voiced); SetLetterBits(tr,5,sk_voiced);
} }
break; break;

+ 1
- 0
src/translate.h View File

int Eof(void); 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 ResetLetterBits(Translator *tr, int groups);
void SetLetterBits(Translator *tr, int group, const char *string); void SetLetterBits(Translator *tr, int group, const char *string);
void SetLetterBitsRange(Translator *tr, int group, int first, int last); void SetLetterBitsRange(Translator *tr, int group, int first, int last);
void SetLetterVowel(Translator *tr, int c); void SetLetterVowel(Translator *tr, int c);

+ 1
- 1
src/voices.cpp View File

} }


// first check for a voice with this filename // first check for a voice with this filename
if(LoadVoice(buf,1) != NULL)
if((first_voice == NULL) && (LoadVoice(buf,1) != NULL))
{ {
voice_selected = first_voice; voice_selected = first_voice;



Loading…
Cancel
Save