From be3933d1d353241826c80b665eaa8ebae487c8b5 Mon Sep 17 00:00:00 2001 From: jonsd Date: Thu, 21 Mar 2013 18:02:06 +0000 Subject: [PATCH] [1.47.03a] Change sound of Portugal 'rr' and initial 'r'. Fixed for Aragonese ordinal numbers. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@330 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/an_list | 13 ++++--------- dictsource/dict_phonemes | 2 +- dictsource/hu_rules | 8 ++++++++ phsource/compile_report | 4 +++- phsource/ph_portugal | 17 +++++++++++++++++ src/numbers.cpp | 19 +++++++++++++------ src/synthdata.cpp | 2 +- src/tr_languages.cpp | 10 +++++----- src/translate.h | 2 ++ 9 files changed, 54 insertions(+), 23 deletions(-) diff --git a/dictsource/an_list b/dictsource/an_list index 7ee670d3..3151fcc2 100755 --- a/dictsource/an_list +++ b/dictsource/an_list @@ -115,7 +115,6 @@ _dpt kon _#º o _#ª a - _1ox prim'Er _2ox seQ'und _3ox tErT'Er @@ -167,6 +166,9 @@ _9Co nweUTEnt'en _0M1o mil'en _0M2o mil^on'en _1M2o mil^on'en +_0M4o bil^on'en +_1M4o bil^on'en + // characters $ d'olar @@ -277,13 +279,6 @@ hu $u sant $u donya $u don $u -he $u -has $u -ha $u -han $u -heba $u -hebas $u -heban $u se'n sen $u @@ -519,4 +514,4 @@ unix j'uniks whatsapp was'app windows w'indows -mobile _^_EN +//mobile _^_EN diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 984799ae..aa23f7d3 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -35,7 +35,7 @@ n^ p p` r s S t t` tS tS` v w x z Z -Dictionary an_dict 2013-03-19 +Dictionary an_dict 2013-03-21 a aI aU e E eI eU i o O oI u U diff --git a/dictsource/hu_rules b/dictsource/hu_rules index 22e2c8b8..299801b1 100644 --- a/dictsource/hu_rules +++ b/dictsource/hu_rules @@ -1035,6 +1035,9 @@ szivárvá) ny (játsz n^ haszo) n (jár n boszorká) ny (jelet n^ káno) n (jog n + legé) ny (jár n^ + szé) n (jelek n +teljesítmé) ny (j n^ .group o o o @@ -2013,6 +2016,8 @@ _tisztele) tj (el tj szen) tj (akab tj közérze) tj (aví tj ké) tj (átszm tj +szavaza) tj (og tj +szavaza) tj (eg tj .group ts ts (_S2 tS //general rule with word end of ts letters @@ -2230,6 +2235,9 @@ felira) ts (áv t|S _cha) tsz (ob t|s robo) ts (of t|S merényle) ts (or t|S +szavaza) ts (o t|S + szige) ts (ej t|S + szige) ts (o t|S .group tt diff --git a/phsource/compile_report b/phsource/compile_report index 497ff9de..a2e4e298 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -49,7 +49,7 @@ consonants 11 119 ca 11 127 an 4 125 pt 29 140 - pt-pt 18 140 + pt-pt 20 140 ro 36 148 el 10 125 grc 12 129 @@ -721,6 +721,7 @@ r3/rx [*] base [r] et [r/] fr [R] fr-ca + [x] pt-pt [*;] ro [r#] is [r/] tn @@ -2548,6 +2549,7 @@ vwl_fr/r [r] fr vwl_fr/r_ [r/] fr vwl_fr/r_@ [r/] fr vwl_fr/r@ fr post_r +vwl_fr/@R [x] pt-pt vwl_fr/r@2 fr post_r vwl_fr/@R2 [R] fr-ca vwl_fr/ra fr post_r diff --git a/phsource/ph_portugal b/phsource/ph_portugal index df714512..37f51ed7 100644 --- a/phsource/ph_portugal +++ b/phsource/ph_portugal @@ -133,6 +133,23 @@ phoneme w endphoneme +phoneme x // [r] for Portugal + liquid + trill + ipa ʁ + lengthmod 7 + Vowelin f1=0 f2=1500 -400 400 f3=-400 80 + IF nextPh(isNotVowel) THEN + ChangePhoneme(r/) + ENDIF + FMT(vwl_fr/@R) addWav(r3/rx, 120) +endphoneme + + +phoneme R // for Portugal this is same the as [r] + import_phoneme pt/r +endphoneme + phoneme s# // This is [s] for Brazil, [S] for Portugal CALL base/S diff --git a/src/numbers.cpp b/src/numbers.cpp index 0ecff92f..44d11b98 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -691,7 +691,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) if(ph_buf[0] == 0) { - if(al_offset == translator->langopts.alt_alphabet) + if((al_offset != 0) && (al_offset == translator->langopts.alt_alphabet)) language = translator->langopts.alt_alphabet_lang; else if((alphabet != NULL) && (alphabet->language != 0) && !(al_flags & AL_NOT_LETTERS)) @@ -876,6 +876,7 @@ void SetSpellingStress(Translator *tr, char *phonemes, int control, int n_chars) // Numbers static char ph_ordinal2[12]; +static char ph_ordinal2x[12]; static int CheckDotOrdinal(Translator *tr, char *word, char *word_end, WORD_TAB *wtab, int roman) @@ -1302,7 +1303,11 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out if(control & 4) { sprintf(string,"_%d%cx",value,ord_type); // LANG=hu, special word for 1. 2. when there are no higher digits - found = Lookup(tr, string, ph_digits); + if((found = Lookup(tr, string, ph_digits)) != 0) + { + if(ph_ordinal2x[0] != 0) + strcpy(ph_ordinal, ph_ordinal2x); // alternate pronunciation (lang=an) + } } if(found == 0) { @@ -1362,8 +1367,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out else { - if((is_ordinal) && - ((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS) || (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL))) + if(is_ordinal) { sprintf(string,"_%dX%c", tens, ord_type); if(Lookup(tr, string, ph_tens) != 0) @@ -1457,7 +1461,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out { Lookup(tr, "_0and", ph_and); - if((is_ordinal) && (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL)) + if((is_ordinal) && (tr->langopts.numbers2 & NUM2_ORDINAL_NO_AND)) ph_and[0] = 0; if(tr->langopts.numbers & NUM_SWAP_TENS) @@ -1884,6 +1888,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned ordinal = 2; flags[0] |= FLAG_SKIPWORDS; skipwords = 1; + sprintf(string,"_x#%s",suffix); + Lookup(tr, string, ph_ordinal2x); // is there an alternate pronunciation? } } } @@ -2179,7 +2185,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned if((tr->langopts.numbers & NUM_NOPAUSE) && (next_char == ' ')) utf8_in(&next_char,p); - if(!iswalpha(next_char) && !((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact != 0))) + if(!iswalpha(next_char) && (thousands_exact==0)) +// if(!iswalpha(next_char) && !((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact != 0))) strcat(ph_out,str_pause); // don't add pause for 100s, 6th, etc. } diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 99f02651..7eda9693 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.47.03 21.Mar.13"; +const char *version_string = "1.47.03a 21.Mar.13"; const int version_phdata = 0x014701; int option_device_number = -1; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 8cea390e..aeea1a93 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -290,7 +290,7 @@ static const char transpose_map_latin[] = { tr->langopts.max_initial_consonants = 3; tr->langopts.replace_chars = NULL; tr->langopts.ascii_language[0] = 0; // Non-Latin alphabet languages, use this language to speak Latin words, default is English - + tr->langopts.alt_alphabet_lang = L('e','n'); SetLengthMods(tr,201); // tr->langopts.length_mods = length_mods_en; @@ -679,7 +679,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA; - tr->langopts.numbers2 = 0x2 | NUM2_MULTIPLE_ORDINAL; // variant form of numbers before thousands + tr->langopts.numbers2 = 0x2 | NUM2_MULTIPLE_ORDINAL | NUM2_ORDINAL_NO_AND; // variant form of numbers before thousands if(name2 == L_grc) { @@ -733,7 +733,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_ROMAN | NUM_ROMAN_AFTER; - tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL; + tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_ORDINAL_NO_AND; if(name2 == L('c','a')) { @@ -745,7 +745,7 @@ Translator *SelectTranslator(const char *name) if(name2 == L('a','n')) { tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2; - tr->langopts.numbers2 = 0; + tr->langopts.numbers2 = NUM2_ORDINAL_NO_AND; } else if(name2 == L_pap) @@ -1278,7 +1278,7 @@ SetLengthMods(tr,3); // all equal tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_INITIAL_2 | S_PRIORITY_STRESS; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_DFRACTION_2 | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_ROMAN; - tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_NO_TEEN_ORDINALS; + tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_NO_TEEN_ORDINALS | NUM2_ORDINAL_NO_AND; SetLetterVowel(tr,'y'); ResetLetterBits(tr,0x2); SetLetterBits(tr,1,"bcdfgjkmnpqstvxz"); // B hard consonants, excluding h,l,r,w,y diff --git a/src/translate.h b/src/translate.h index 98228d30..6ce17c3d 100644 --- a/src/translate.h +++ b/src/translate.h @@ -503,6 +503,7 @@ typedef struct { #define NUM2_THOUSANDS_VAR4 0x100 #define NUM2_THOUSANDS_VAR5 0x140 +#define NUM2_ORDINAL_NO_AND 0x800 #define NUM2_MULTIPLE_ORDINAL 0x1000 #define NUM2_NO_TEEN_ORDINALS 0x2000 #define NUM2_MYRIADS 0x4000 @@ -511,6 +512,7 @@ typedef struct { // bits 1-4 use variant form of numbers before thousands,millions,etc. // bits 6-8 use different forms of thousand, million, etc (M MA MB) // bit9=(LANG=rw) say "thousand" and "million" before its number, not after + // bit11=(LANG=es,an) don't say 'and' between tens and units for ordinal numbers // bit12=(LANG=el,es) use ordinal form of hundreds and tens as well as units // bit13=(LANG=pt) don't use 11-19 numbers to make ordinals // bit14=(LANG=ko) use myriads (groups of 4 digits) not thousands (groups of 3)