diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index b22f7993..e9d82f59 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -307,3 +307,16 @@ oi ong ou u ui yu b c d f g h j k l m n N p r s t 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 diff --git a/dictsource/el_rules b/dictsource/el_rules index 575d0e9d..22cfc35f 100644 --- a/dictsource/el_rules +++ b/dictsource/el_rules @@ -6,7 +6,8 @@ // Α α, Β β, Γ γ, Δ δ, Ε ε, Ζ ζ, Η η, Θ θ, Ι ι, Κ κ, Λ λ, Μ μ, Ν ν, Ξ ξ, // Ο ο, Π π, Ρ ρ, Σ σ ς (word-final form), Τ τ, Υ υ, Φ φ, Χ χ, Ψ ψ, Ω ω. -// Y: ε η ι υ (+tonos variants, front vowels). +// Letter group B: θ κ ξ π ς σ τ φ χ (voiceless consonants) +// Letter group Y: ε η ι υ έ ή ί ύ (front vowels). .group α @@ -43,6 +44,7 @@ δ D δ (δ + .group ε ε e ει i diff --git a/phsource/compile_report b/phsource/compile_report index 682ee354..57df62e6 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -30,7 +30,7 @@ el 8 112 sv 25 114 no 29 118 - is 27 113 + is 32 117 vi 41 129 zh_yue 32 120 sw 14 101 @@ -143,6 +143,7 @@ 1 n^/_n^ base 1 n^/n^_ base 1 n^/n^@ base + 1 n^/n^#_ is 6 n/_n base ro 3 n/n_ base ro 1 n/n@ base @@ -233,13 +234,14 @@ 1 ufric/sx_sv sv 1 ufric/th base 1 ufric/th_ base + 1 ufric/tl# is 2 ufric/x base vi 4 ufric/x2 af nl pt 1 ufric/x_hr hr 1 ustop/c base 5 ustop/k base en fr hi 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 11 ustop/kr base en fi fr hi hu it el sw 9 ustop/k_unasp base fi hi hu it el @@ -339,7 +341,7 @@ 2 vdiph/ooi_3 en_wm hr 2 vdiph/ou fi zh_yue 2 vdiph/ou_2 sk ro - 1 vdiph/ou_3 is + 2 vdiph/ou_3 is 1 vdiph/@u en_wm 1 vdiph/@u_2 en_rp 1 vdiph/@u_3 ro @@ -386,8 +388,8 @@ 2 voc/Q base 4 voc/Q_ base 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 2 vocw/Q base 3 vocw/Q_ base nl @@ -606,8 +608,8 @@ 20 x/b base hi ro is 2 x/b_ base 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 3 x/dzh base hi 5 x/dzh_ base hi ru diff --git a/phsource/n/n#_ b/phsource/n/n#_ index e4813be6..c9e57aa6 100644 Binary files a/phsource/n/n#_ and b/phsource/n/n#_ differ diff --git a/phsource/n^/n^#_ b/phsource/n^/n^#_ new file mode 100644 index 00000000..23895f28 Binary files /dev/null and b/phsource/n^/n^#_ differ diff --git a/phsource/nn/nn#_ b/phsource/nn/nn#_ index 86bde9b0..cdcfd5af 100644 Binary files a/phsource/nn/nn#_ and b/phsource/nn/nn#_ differ diff --git a/phsource/ph_hungarian b/phsource/ph_hungarian index 7be3f573..ff13f2bc 100644 --- a/phsource/ph_hungarian +++ b/phsource/ph_hungarian @@ -135,7 +135,7 @@ phoneme d // dental variant of /d/ vowelin 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 - before _ d/d_+x/d_ + before _ d/d_+x/d_dnt%80 before r d/dr+x/d_dnt%110 after _ NULL after @ d/xd diff --git a/src/dictionary.cpp b/src/dictionary.cpp index e0491be4..7dab1cea 100755 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -629,6 +629,21 @@ void SetLetterVowel(Translator *tr, int c) 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; ixletter_bits); ix++) + { + tr->letter_bits[ix] &= mask; + } +} + + void SetLetterBits(Translator *tr, int group, const char *string) {//============================================================== int bits; diff --git a/src/extras.cpp b/src/extras.cpp index d4fb247e..33c1d9e2 100644 --- a/src/extras.cpp +++ b/src/extras.cpp @@ -916,6 +916,7 @@ void TestTest(int control) unsigned int ix=0; char textbuf[2000]; espeak_VOICE voice; + espeak_VOICE *voice2; //FindPhonemesUsed(); //return; @@ -956,7 +957,10 @@ if(control==2) voice.gender = 0; voice.age = 0; voice.variant = 0; - espeak_SetVoiceByName("en"); + ix = espeak_SetVoiceByName("pt-xx"); + + voice2 = espeak_GetCurrentVoice(); + // espeak_SetVoiceByProperties(&voice); espeak_SetParameter(espeakRANGE,0,0); espeak_Synth(textbuf,ix+1,0,POS_CHARACTER,0,espeakCHARS_8BIT+espeakSSML,NULL,NULL); diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 3338d619..696e8d32 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.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; int option_device_number = -1; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index e923c6a7..9cda3c8c 100755 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -653,7 +653,7 @@ static void SmoothSpect(void) modified = 0; 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++) { diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index d1215920..4a7f53f1 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -122,8 +122,8 @@ Translator *SelectTranslator(const char *name) // 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_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 wchar_t el_char_apostrophe[] = {0x3c3,0}; // σ @@ -259,6 +259,8 @@ Translator *SelectTranslator(const char *name) tr->letter_bits_offset = OFFSET_DEVANAGARI; tr->langopts.replace_chars = replace_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_B,0x3e,0x4d); // vowel signs + virama SetLetterBitsRange(tr,LETTERGP_C,0x15,0x39); // the main consonant range @@ -311,7 +313,7 @@ Translator *SelectTranslator(const char *name) case L('h','u'): // Hungarian { 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 unsigned int replacement_chars_hu[] = {0x150,0x151,0x170,0x171,0}; // allow o,u-circumflex for o,u-double-acute @@ -322,7 +324,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.replacement_chars = replacement_chars_hu; 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_IT_DOUBLING] = 1; tr->langopts.long_stop = 130; @@ -336,14 +338,15 @@ Translator *SelectTranslator(const char *name) case L('i','s'): // Icelandic { 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(); SetupTranslator(tr,stress_lengths_is,stress_amps_is); tr->langopts.stress_rule = 1; 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,3,"jvr"); // Letter group H tr->letter_groups[8] = is_L08; @@ -502,6 +505,7 @@ Translator *SelectTranslator(const char *name) SetLetterVowel(tr,'y'); SetLetterVowel(tr,'r'); + ResetLetterBits(tr,0x2); SetLetterBits(tr,5,sk_voiced); } break; diff --git a/src/translate.h b/src/translate.h index df795125..37dc06b9 100755 --- a/src/translate.h +++ b/src/translate.h @@ -504,6 +504,7 @@ int lookupwchar(const unsigned short *list,int c); int Eof(void); char *strchr_w(const char *s, int c); int IsBracket(int c); +void ResetLetterBits(Translator *tr, int groups); void SetLetterBits(Translator *tr, int group, const char *string); void SetLetterBitsRange(Translator *tr, int group, int first, int last); void SetLetterVowel(Translator *tr, int c); diff --git a/src/voices.cpp b/src/voices.cpp index 235c89e0..c389fe59 100755 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -1341,7 +1341,7 @@ espeak_ERROR SetVoiceByName(const char *name) } // 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;