diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index b22b9ca8..1a0e990c 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -134,28 +134,8 @@ r s S s. t T t. t.h th v w x z -Dictionary hr_dict - -& @ @- @2 a A a: aI -aU E e e: E~ i I i: -l- O o o: oU r- u U -u: y - -* b d dZ dZ; f g h -j k l l^ m n N n^ -p r R s S t tS ts -tS; v x z Z - - Dictionary hu_dict -A a: E e: i i: o o: -u u: Y Y: - -: b c d dZ f g h -j J k l m n n^ p -R R2 s S s2 t tS ts -v z Z Dictionary it_dict @@ -354,3 +334,16 @@ f j k kh l m n N p ph R R2 R3 s s. S; t th ts ts. ts. tS; tS; tsh v w x z z. + + +Dictionary hbs_dict + +& @ @2 a A a: aI aU +E e e: E~ i I i: l- +O o o: oU r* r- u U +u: y + +* b d dZ dZ; f g h +j k l L l^ m n N +n^ p r R s S t tS +ts tS; v x z Z diff --git a/dictsource/en_list b/dictsource/en_list index a728b89b..11cc444c 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -1229,6 +1229,7 @@ myrrh m3: naif naI'i:f naïve naI'i:v +nasa nasa2 nascent neIs@nt nativity $2 natural natS@r@L diff --git a/dictsource/en_rules b/dictsource/en_rules index f22e6921..d224391a 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -944,7 +944,7 @@ as (tern a2s as (thm as as (tral as - as (tro aas + as (tro as as (trolog a2s as (trono a2s ass (ym as diff --git a/dictsource/grc_list b/dictsource/grc_list new file mode 100644 index 00000000..38ecac38 --- /dev/null +++ b/dictsource/grc_list @@ -0,0 +1,29 @@ + +?1 _0lang _^_EN // speak numbers in English + +// articles +hο $u // ὁ +τὼ $u // τώ +οhι $u // οἱ +hη $u // ἡ +τὰ $u // τά +αhι $u // αἱ +τὸ $u // τό + +τοὺ $u // τοῦ +τοὶν $u // τοῖν +τὴς $u // τῆς +ταὶν $u // ταῖν +τὼν $u // τῶν + +τῲ $u // τῷ +τοὶς $u // τοῖς +τῂ $u // τῇ +ταὶν $u // ταῖν +ταὶς $u // ταῖς + +τὸν $u // τόν +τοὺς $u // τούς +τὴν $u // τήν +τὰς $u // τάς + diff --git a/dictsource/grc_rules b/dictsource/grc_rules new file mode 100644 index 00000000..8c6c4444 --- /dev/null +++ b/dictsource/grc_rules @@ -0,0 +1,344 @@ +// Spelling to Phoneme rules for: Ancient Greek + +// Preliminary character substitution: +// Convert tonos, oxia and perispomeni to varia +// Remove psili (soft breathing) +// Convert dasia accent to a separate prefix character ("h") +// Remove iota subscripts +// Replace Latin characters by same-shape Greek characters + +.replace +a α // Latin->Greek +o ο +v ν +A Α +B Β +E Ε +Z Ζ +H Η +I Ι +K Κ +M Μ +N Ν +O Ο +P Ρ +T Τ +Y Υ +X Χ + +// alpha +ά ὰ // tonos +ά ὰ // oxia +ᾴ ᾲ +ᾶ ὰ +ᾷ ᾲ + +ἀ α +ἁ hα +ἂ ὰ +ἃ hὰ +ἄ ὰ +ἅ hὰ +ἆ ὰ +ἇ hὰ + +ᾀ ᾳ +ᾁ hᾳ +ᾂ ᾲ +ᾃ hᾲ +ᾄ ᾲ +ᾅ hᾲ +ᾆ ᾲ +ᾇ hᾲ + +// epsilon +έ ὲ +έ ὲ +ἐ ε +ἑ hε +ἒ ὲ +ἓ hὲ +ἔ ὲ +ἕ hὲ + +// eta +ή ὴ +ή ὴ +ῄ ῂ +ῆ ὴ +ῇ ῂ + +ἠ η +ἡ hη +ἢ ὴ +ἣ hὴ +ἤ ὴ +ἥ hὴ +ἦ ὴ +ἧ hὴ + +ᾐ ῃ +ᾑ hῃ +ᾒ ῂ +ᾓ hῂ +ᾔ ῂ +ᾕ hῂ +ᾖ ῂ +ᾗ hῂ + +//iota +ί ὶ +ί ὶ +ῖ ὶ + +ἰ ι +ἱ hι +ἲ ὶ +ἳ hὶ +ἴ ὶ +ἵ hὶ +ἶ ὶ +ἷ hὶ + +ΐ ῒ +ῗ ῒ + +// omicron +ό ὸ +ό ὸ +ὀ ο +ὁ hο +ὂ ὸ +ὃ hὸ +ὄ ὸ +ὅ hὸ + +// upsilon +ύ ὺ +ύ ὺ +ῦ ὺ + +ὐ υ +ὑ hυ +ὒ ὺ +ὓ hὺ +ὔ ὺ +ὕ hὺ +ὖ ὺ +ὗ hὺ + +ΰ ῢ +ῧ ῢ + +// omega +ώ ὼ +ώ ὼ +ῴ ῲ +ῶ ὼ +ῷ ῲ + +ὠ ω +ὡ hω +ὢ ὼ +ὣ hὼ +ὤ ὼ +ὥ hὼ +ὦ ὼ +ὧ hὼ + +ᾠ ῳ +ᾡ hῳ +ᾢ ῲ +ᾣ hῲ +ᾤ ῲ +ᾥ hῲ +ᾦ ῲ +ᾧ hῲ + +// rho +ῤ ρ +ῥ hρ + + +.group α + α a + αι aI + αὶ 'aI + αυ aU + αὺ 'aU + αhι haI + αhὶ 'haI + αhυ haU + αhὺ 'haU + +.group β + β b + + +.group γ + γ g + γγ Ng + +.group δ + δ d + + +.group ε + ε e + ει e: + εὶ 'e: + ευ eU + εὺ 'eU + εhι he: + εhὶ 'he: + εhυ heU + εhὺ 'heU + +.group ζ + ζ z + + +.group η + η E: + ηι EI: + ηὶ 'EI: + ηυ EU: + ηὺ 'EU: + ηhι hEI: + ηhὶ 'hEI: + ηhυ hEU: + ηhὺ 'hEU: + +.group θ + θ T + + +.group ι + ι i + + +.group ϊ + ϊ i + + +.group κ + κ k + + +.group λ + λ l + + +.group μ + μ m + + +.group ν + ν n + + +.group ξ + ξ ks + + +.group ο + ο o + οι oI + οὶ 'oI + ου u: + οὺ 'u: + οhι hoI + οhὶ 'hoI + οhυ hu: + οhὺ 'hu: + +.group π + π p + + +.group ρ + ρ R + + +.group ς + ς s + + +.group σ + σ s + + +.group τ + τ t + + +.group υ + υ y + υι yI + υὶ 'yI + υhι hyI + υhὶ 'hyI + +.group ϋ + ϋ y + ϋι yI + ϋὶ 'yI + ϋhι hyI + ϋhὶ 'hyI + +.group φ + φ f + + +.group χ + χ x + + +.group ψ + ψ ps + + +.group ω + ω O: + ωι OI: + ωὶ 'OI: + ωυ OU: + ωὺ 'OU: + ωhι hOI: + ωhὶ 'hOI: + ωhυ hOU: + ωhὺ 'hOU: + + + +.group h // dasia (rough breathing) + h h + + +.group + ὰ 'a + ᾳ aI: + ᾲ 'aI: + ὲ 'e + ὴ 'E: + ῃ EI: + ῂ 'EI: + ὶ 'i + ῒ 'i + ὸ 'o + ὺ 'y + ῢ 'y + ὼ 'O: + ῳ OI: + ῲ 'OI: + + + + + + + + + + + diff --git a/dictsource/hbs_list b/dictsource/hbs_list new file mode 100644 index 00000000..8bb35ab8 --- /dev/null +++ b/dictsource/hbs_list @@ -0,0 +1,603 @@ + +// "hbs" is the ISO 639-3 code for Serbian/Croatian/Bosnian macrolanguage +// This file is UTF-8 encoded + +// Conditional rules: +// ?1 Croatian +// ?2 Serbian +// ?3 Bosnian (Bosna and Hercegovina) +// ?4 Serbian & Bosnian + + +// Letters + b b@ + c ts@ + č tS@ + ć tS;@2 + d d@ + dž dZ@ + đ dZ;@2 + f f@ + g g@ + h x@ + j j@2 + k k@ + l l@ + lj l^@ + m m@ + n n@ + nj n^@ + p p@ + q kv@ + r R@ + _s s@ + š S@ + t t@ + v v@ + w dvostr*uko||v@ +?2 w duplo||v@ + x iks + y ipsilon + z z@ + ž Z@ + +// symbols + _?? znak // unknown symbol + _?A slovo // unknown letter + © 'aUtoRsk&||pr*av& + % p'osto + + plus + € 'euRo +?4 € 'evr*o + @ _'at +?2 @ tRgovatSkoi + & _'end + ! 'usklItSnIk +?2 ! 'uzvItSnIk + : dv'ototSk& +?4 : dv'ot&tSk& + # br*'oj_ + / kr*'oz_ + \\ b'EkslES + ^ ts'iRkumfleks + ~ t'ild& + ¤ v'alut& + § 'odlom&k + µ m'ikr*o + ¶ tSl'an&k + ° st'up&n^ +?4 ° st'epen + _" n'avodnIk +?2 _" n'avod + _‚ 'otvoReni||n'avodnIk + _„ sp'uSteni||n'avodnIk +?2 _„ z&tvoReni||n'avodnIk + … tr*'i||t'otSke +?4 … tr*'i||t'atSke + † kr*'iZ +?2 † kr-'st + ‡ dv'ostr*Uki||kr*'iZ +?2 ‡ dv'ostRUki||kR'st + ‰ pr*'omil + _‹ 'otvoReni||n'avodnIk + _‘ 'otvoReni||n'avodnIk + _’ j'ednostr*'uki||n'avodnIk + _“ 'otvoReni||n'avodnIk + _” z'atvoReni||n'avodnIk + • kr*'upna||t'otSk& +?4 • kr*'upna||t'atSk& + _– En||ts'r-t& + _— Em||ts'r-t& + ™ pr*'o'izvodZ&tS + ˘ br*'evis + ¨ pr*'ijegl&s +?2 ¨ pr*'egl&s + _« 'otvoReni||n'avodnIk + _­ pr*'ivr*emen&||ts'r-t'its& + · p'ut& + ¸ sed'il& + _» z'atvoReni||n'avodnIk + ® R'egistr*atsIj& + ł l@||s&||ts'r-t'itsom + × p'ut& + ÷ p'odijel^,eno +?2 ÷ p'odel^,eno + + _$ d'ol&R + _- m'inus + _* zvj'ezdits& +?2 _* zv'ezdits& + _= j'edn&ko + _@ t'r-g'ov&tSko||'a +?2 _@ et + + _( 'otvoRen&||z'agr*ad& + _) z'atvoRen&||z'agr*ad& + _' 'apostr*of + _, z'aRez +?2 _, z'apeta + _- ts'r-t'its& + _. t'otSk& +?4 _. t'atSk& + _; t'otSk&z,a*Ez +?2 _; t'atSk&z,apeta +?3 _; t'atSk&z,a*Ez + _< m'an^i||'od + _= j'edn&ko + _> v'etSi||'od + _? 'upitnIk + _& t'r-g'ov&tSko||'i + _[ 'otvoRen&||'ugl&t& +?2 _[ 'otvoRen&||'ugl&st& + _] z'atvoRen&||'ugl&t& +?2 _] z'atvoRen&||'ugl&st& + __ ts'r-t& + _` gr*'avis + _{ 'otvoRen&||v'ititS&st& + _| 'okomits& +?2 _| 'uspR&vn& + _} z'atvoRen&||v'ititS&st& + + +// Numbers + _0 n'ul& + _1 j'ed&n + _2 dv'a + _2f dv'ije +?2 _2f dv'E + _3 tr*'i + _4 tS'EtIRI + _5 p'Et + _6 S'Est + _7 s'Ed&m + _8 'os&m + _9 d'EvEt + _10 d'EsEt + _11 j'ed&naIst + _12 dv'anaIst + _13 tr*'inaIst + _14 tS'Etr-naIst + _15 p'EtnaIst + _16 S'EsnaIst + _17 s'Ed&mnaIst + _18 'os&mnaIst + _19 d'EvEtnaIst +?2 _11 j'ed&naEst +?2 _12 dv'anaEst +?2 _13 tr*'inaEst +?2 _14 tS'Etr-naEst +?2 _15 p'EtnaEst +?2 _16 S'EsnaEst +?2 _17 s'Ed&mnaEst +?2 _18 'os&mnaEst +?2 _19 d'EvEtnaEst + _2X dv'adEsEt + _3X tr*'idEsEt + _4X tS'Etr-dEsEt + _5X p'EdEsEt + _6X S'EzdEsEt + _7X s'Ed&mdEsEt + _8X 'os&mdEsEt + _9X d'EvEdEsEt + _0C st'o_ +?2 _0C st'O_ + _2C dvj'est'o +?2 _2C dv'est'a_ +?2 _3C tR'ist'a_ +?2 _4C tSetR'ist'o_ + _6C S'Est'o + _0M1 t'isUtS;& + _0MA1 t'isUtS;e + _1M1 t'isUtS;U +?2 _0M1 h'il^,&d& +?2 _0MA1 h'il^,&de +?2 _1M1 h'il^,&dU +?2 _1MA1 jedn&||hiL&d& +?3 _0M1 h'il^ad& +?3 _0MA1 h'il^ade +?3 _1M1 h'il^adU + _0M2 m'ilijUna + _0MA2 m'ilijUna + _1M2 m'ilijUn +?4 _0M2 m'ilijOna +?4 _0MA2 m'ilijOna +?4 _1M2 m'ilijOn + _0M3 m'iliaRdI + _0MA3 m'iliaRde + _1M3 m'iliaRdU +?2 _0M3 milijArdI +?2 _0MA3 milijArde +?2 _1M3 milijArdU + _0M4 b'ilijUna + _1M4 b'ilijUn +?4 _0M4 b'ilijOna +?4 _1M4 b'ilijOn + _dpt _:z'a*Ez_ + _roman r*'imsko + +// not Roman numerals +// vi vi // not needed if only all-capitals are spoken as Roman numbers + + +// Abbreviations +aaa $abbrev +aac $abbrev +ab $only $abbrev $capital +abc $abbrev +abk $only $abbrev +abs $abbrev +acc $only $abbrev +acf $only $abbrev +acfm $abbrev +acg $only $abbrev +acgm $abbrev +acl $only $abbrev +acm $only $abbrev +acw $only $abbrev +add $only $abbrev +adn $only $abbrev +adp $only $abbrev +adsl $abbrev +agm $abbrev +ahk $only $abbrev +aif $only $abbrev +aip $only $abbrev +alg $only $abbrev +alm $only $abbrev +amd $only $abbrev +amf $only $abbrev +amg $only $abbrev +aph $only $abbrev +apj $only $abbrev +apl $only $abbrev +apm $only $abbrev +app $only $abbrev +arg $only $abbrev +arj $only $abbrev +asc $only $abbrev +asf $only $abbrev +asm $only $abbrev +asn $only $abbrev +asp $only $abbrev +asx $only $abbrev +atf $only $abbrev +atp $abbrev +av $only $abbrev +avg $abbrev +avr $only $abbrev +awb $only $abbrev +awt $only $abbrev +brf $abbrev +brl $abbrev +brx $abbrev +cca $abbrev +cda $only $abbrev +cdr $abbrev +cdrw $abbrev +cgi $abbrev +clr $abbrev +cpe $only $abbrev +cpu $only $abbrev +cr $only $abbrev +crt $only $abbrev +ctrl $abbrev +daa $only $abbrev +doo $abbrev +dox $only $abbrev +dqy $abbrev +dsr $only $abbrev +ear $only $abbrev +ecdl $only $abbrev +ecp $only $abbrev +ecs $only $abbrev +elm $only $abbrev +emf $only $abbrev +emh $only $abbrev +eml $only $abbrev +ems $only $abbrev +epf $only $abbrev +eq $only $abbrev +esc $only $abbrev +etd $only $abbrev +eu $only $abbrev +eur $only $abbrev +exc $only $abbrev +faq $abbrev +fbi $abbrev +ffa $only $abbrev +fr $only $abbrev +frm $abbrev +frt $only $abbrev +frx $abbrev +gho $only $abbrev +gr $only $abbrev +grr $abbrev +grrr $abbrev +grp $abbrev +grps $abbrev +grs $only $abbrev +grx $only $abbrev +gui $only $abbrev +hho $abbrev +hr $only $abbrev +hrk $only $abbrev +hrt $only $abbrev $capital +hrv $only $abbrev +hta $only $abbrev +hzzo $abbrev +ibm $abbrev +icc $only $abbrev +icm $only $abbrev +ics $only $abbrev +idb $only $abbrev +idc $only $abbrev +idm $only $abbrev +iff $only $abbrev +ifu $only $abbrev +ilk $only $abbrev +img $only $abbrev +iml $only $abbrev +isdn $abbrev +isl $only $abbrev +isp $only $abbrev +iss $only $abbrev +iq $only $abbrev +iqy $only $abbrev +itw $only $abbrev +itz $only $abbrev +ivf $only $abbrev +jpi $only $abbrev +jrr $abbrev +jse $only $abbrev +lha $abbrev +liq $only $abbrev +maq $only $abbrev +maw $only $abbrev +mda $only $abbrev +mde $only $abbrev +mdi $only $abbrev +mga $only $abbrev +mge $only $abbrev +mgi $only $abbrev +mpa $only $abbrev +mpe $only $abbrev +mpr $only $abbrev +msi $only $abbrev +mup $abbrev $capital +nco $only $abbrev +nfo $only $abbrev +nji $only $abbrev +nr $only $abbrev +nra $only $abbrev +nrb $only $abbrev +nrc $only $abbrev +nre $only $abbrev +nrf $only $abbrev +nrg $abbrev +nrh $only $abbrev +nri $only $abbrev +nrm $only $abbrev +nrq $only $abbrev +nrs $only $abbrev +nru $only $abbrev +nrw $only $abbrev +nsa $only $abbrev +nsi $only $abbrev +nvda $abbrev +obd $only $abbrev +obj $only $abbrev +obt $only $abbrev +obz $only $abbrev +ocr $only $abbrev +ocx $only $abbrev +oem $abbrev +off $only $abbrev +oft $only $abbrev +ofx $only $abbrev +ogc $only $abbrev +ogg $only $abbrev +ogl $only $abbrev +omw $abbrev +oqy $only $abbrev +os $only $abbrev $capital +oss $only $abbrev +otf $only $abbrev +otm $only $abbrev +pda $abbrev +pdi $only $abbrev +pgi $only $abbrev +pho $only $abbrev +pko $only $abbrev +pma $only $abbrev +ppa $only $abbrev +pr $only $abbrev +prf $only $abbrev +prg $only $abbrev +prn $abbrev +prt $only $abbrev +qbr $abbrev +qpr $abbrev +raw $only $abbrev +rb $abbrev +rba $abbrev +rc $only $abbrev +rcc $abbrev +rcd $abbrev +rcs $abbrev +rd $only $abbrev +rds $abbrev +rgb $abbrev +rh $only $abbrev +rk $only $abbrev +rm $only $abbrev +rma $only $abbrev +rme $only $abbrev +rmf $only $abbrev +rmi $only $abbrev +rmt $only $abbrev +rmx $abbrev +rn $only $abbrev +rnk $only $abbrev +rp $only $abbrev +rqy $only $abbrev +rs $abbrev +rss $abbrev +rta $abbrev +rtf $abbrev +rtl $abbrev +rttl $abbrev +rtv $abbrev +rw $abbrev +rwo $only $abbrev +rx $abbrev +sbr $only $abbrev +scr $only $abbrev +sr $only $abbrev +srd $only $abbrev +ssa $only $abbrev +sys $only $abbrev +tpu $only $abbrev +udf $only $abbrev +udl $only $abbrev +udt $abbrev +uhh $abbrev +uif $only $abbrev +uip $only $abbrev +url $only $abbrev +usd $only $abbrev +usr $only $abbrev +uss $only $abbrev +uu $only $abbrev +uue $only $abbrev +uup $only $abbrev +uxd $only $abbrev +vba $only $abbrev +vbe $only $abbrev +vbr $abbrev +vga $abbrev +wax $only $abbrev +wbr $abbrev +wiz $only $abbrev +wma $only $abbrev +wri $only $abbrev +wta $abbrev +xam $only $abbrev +xba $only $abbrev +xiw $only $abbrev +xla $only $abbrev +xpa $only $abbrev +xpi $only $abbrev +xsi $only $abbrev +xxa $only $abbrev +xxe $only $abbrev +xy $abbrev +xyz $abbrev +yu $only $abbrev +zaa $only $abbrev +zoo $only $abbrev + +br $dot $abbrev +dr $dot $abbrev +mr $dot $abbrev +mrs $dot $abbrev +itd $dot $abbrev +npr $dot $abbrev +str $only $dot $abbrev + +inc $dot +prof $dot +sl $dot +tj $dot +tzv $dot + +// Demonstratives +tko $u+ +?4 šta $u+ +što $u+ +koga $pause +čega $pause + + +// Pronouns + + +// Prepositions +o $u $brk +u $u $brk +s s_ $brk + + +// Conjunctions +a $u $pause // and +i $u $pause // and +ali $pause // but +nego $pause // but +ili $u $pause // or + + + + +// Auxillary verbs +li $u // question + +sam $u // to be, short form +si $u +je $u +smo $u +ste $u +su $u + +bio $u // to be, past tense +bila $u +bilo $u +bili $u + +nisam $u+ // to be, negative +nisi $u+ +nije $u+ +nismo $u+ +niste $u+ +nisu $u+ + +imam $u+ // to have +imaš $u+ +ima $u+ +imamo $u+ +imate $u+ +imaju $u+ + +nemam $u+ // to have, negative +nemaš $u+ +nema $u+ +nemamo $u+ +nemate $u+ +nemaju $u+ + + + + + +// treat as letters if at the end of the clause +a a $atend // letter-a +i i $atend // letter-i +o o $atend // letter-o +s s@ $atend +u u $atend + + +// Exceptions + +ctrl tsontRo:l +control tsontRo:l +docx d'ots||'iks +jpeg j@2||p'eg +macx m'ats||'iks +potx p'ot||'iks +sisx s'is||'iks +start st'aRt +utf u||te||ef + +?2 ra R& +?2 re Re +?2 ar &R +?2 er eR diff --git a/dictsource/hr_rules b/dictsource/hbs_rules old mode 100644 new mode 100755 similarity index 83% rename from dictsource/hr_rules rename to dictsource/hbs_rules index 74a538f0..45804b09 --- a/dictsource/hr_rules +++ b/dictsource/hbs_rules @@ -1,9 +1,15 @@ -// translation rules for Croatian + +// "hbs" is the ISO 639-3 code for Serbian/Croatian/Bosnian macrolanguage // This file is UTF-8 encoded +//The next line gives a voice which is used to find a phoneme table to use to compile this dictionary +//voice=hr + // Conditional rules: // ?1 Croatian -// ?2 Bosnian (Bosna and Hercegovina) +// ?2 Serbian +// ?3 Bosnian (Bosna and Hercegovina) +// ?4 Serbian & Bosnian .group a a a @@ -34,7 +40,8 @@ e E j) e e e (j e - ._) exe %ekse // filetype + _) exe %ekse // filetype +?2 _) exe %eikse // filetype .group f f f @@ -82,11 +89,12 @@ .group q q k qu kv +?2 qu ku .group r r R A) r (A R - K) r (A @-* + K) r (A r* // this phoneme expands to [@-*] rr R r (_ R @@ -140,7 +148,7 @@ $ d'ol&R . totSk& -?2 . tatSk& +?4 . tatSk& . (. _: \.) . @@ -179,7 +187,7 @@ μ m'i ν n'i ξ ks'i - ο 'omIk@-*on_ + ο 'omIkr*on_ .group 0xcf // Greek letters @@ -195,6 +203,6 @@ ψ ps'i ω 'omeg& ώ 'omeg&||t'onos - ό 'omIk@-*on||t'onos + ό 'omIkr*on||t'onos diff --git a/dictsource/hu_list b/dictsource/hu_list deleted file mode 100644 index df8b1dad..00000000 --- a/dictsource/hu_list +++ /dev/null @@ -1,336 +0,0 @@ -// Translations for Hungarian words -// This file is UTF-8 encoded. - -// Conditional rules: -// ?1 speak "i" as Roman number - - -// Numbers - -_0 nullA -_1 EJ -_2 kEttY: -_3 ha:R2om -_4 ne:J -_5 Yt -_6 hAt -_7 he:t -_8 n^olts -_9 kilEnts -_10 ti:z -_1X tizEn -_20 hu:s -_2X huson -_3X hAR2mints -_4X nEJvEn -_5X YtvEn -_6X hAtvAn -_7X hEtvEn -_8X n^oltsvAn -_9X kilEntsvEn -_0C sa:z -_1C sa:z - -_0M1 EzER2 -_1M1 EzER2 -_2M1 ke:tEzER2 -_0M2 millio: -_1M2 millio: -_2M2 ke:tmillio: -_0M3 millia:R2d -_1M3 millia:R2d -_1M3 ke:tmillia:R2d -_0M4 billio: -_1M4 billio: -_2M4 ke:tbillio: -_dpt ||_vEss2Y:_ - - -// Abbreviations -km kilo:me:tER2 -mm milime:tER2 - -a.m An^n^i||m'int $dot -dr doktoR2 $dot -gpu $abbrev -id idY:SEb: $dot -ill illEdvE $dot -ifj ifjAb: $dot -mta $abbrev -pl pe:lda:ul $dot -stb SAtYb:i $dot -u.n u:JnEvEzEt: $dot -ú.n u:JnEvEzEt: $dot -vö v'EZd||_'Yss2E - -?1 i EJ $abbrev // option for Roman number - - -// Articles -a $u // the -az $u -aki $u+ // that - -ez $u+ // this - - -// Pronouns - -// If these are only used for emphasis then then don't need $u -// én $u -// te $u -// ő $u -// mi $u -// ti $u -// ők $u -// maga $u -// maguk $u - - -// Conjunctions -és $u $strend2 // and -de $u+ $pause // but -vagy $u+ $pause // or - -mert $u $pause // because -miatt $u // because -bár $u $pause // although -habár $u $pause // although - -ha $u $pause // if -noha $u $pause // even thought - - -// Prepositions etc. - - -// Negative -nem $alt2 $strend -ne $u+ - -e $u // "-e" question -e $atend // stressed at end of sentence - -// Unstressed adverbs prepositions etc. -néhány $u+ -is $u // also - -elöl $u // in front of -elől $u -elé $u -előtt $u - -mögül $u // behind -mögött $u -mögé $u - -kívül $u -után $u // after - -alól $u -alá $u -alatt $u // below - -felől $u // above -felé $u -fölé $u -felett $u // above -fölött $u - -mellől $u // besides -mellé $u -mellett $u - -közül $u -közé $u -között $u - -an $u // so many persons -as $u -ba $u // into -ban $u // in -be $u -ben $u -ból $u // from inside -ből $u -e $u // in query, his/her -ei $u // his her multiole -en $u -es $u -hez $u -hoz $u // to -höz $u -ig $u // up to -ik $u // -th -nak $u // of, him/her -nek $u -nál $u // by -nél $u -on $u // on -en $u // on -os $u -ra $u // onto -re $u -ról $u // from top of, about -röl $u -ről $u -szer $u -szor $u // times -szór $u -ször $u -tól $u // from -töl $u -től $u -val $u // with -vel $u -án $u // on that day -é $u // his, her -éi $u // his, her multiple -én $u -ón $u -ós $u -ön $u -ös $u - -ellen $u // against -elé $u // before -óta $u // since - -sok $u // many -kevés $u // few -se $u // neither -sem $u // nor - - -be $u //into -ki $u // out of -le $u // down -fel $u // up -föl $u // up -meg $u // finish an action -el $u // away -át $u //through -rá $u //onto -ide $u // here -oda $u // there -szét $u //apart -össze $u //connect with -vissza $u //back -ellen $u //against - -volna $u // would -részén $u //on ... part of - -nélkül $u // without -folytán $u // because of -úgy $u // like that -így $u // like this -egyaránt $u // alike -minden $u // all -részben $u // partly - -egyik $u // one of -másik $u // the other - - -// word pairs - -(hogy a) h,oJ,A -(hogy az) h,oJ,Az -(hogy aki) h,oJ,Aki - - -// Verbs - -vagyok $u // to be, present -vagy $u -van $u -vagyunk $u -vagytok $u -vannak $u - -voltam $u // to be, past -voltál $u -volt $u -voltunk $u -voltatok $u -voltak $u - -leszek $u // to be, future -leszel $u -lesz $u -leszünk $u -lesztek $u -lesznek $u - - -kell $u+ // should - -szabad $u+ // can (allowed) - -fog $u+ // going to -fogok $u+ -fogsz $u+ -fogunk $u+ -fogtok $u+ -fognak $u+ - -tud $u+ // can -tudok $u+ -tudsz $u+ -tudunk $u+ -tudtok $u+ -tudnak $u+ - -// Letters -_a A: -a A: $atend // letter "a" -b be: -c tse: -d de: -_e E -f Eff -g ge: -h ha: -j je: -k ka: -l Ell -m Emm -n Enn -p pe: -q ku -r ERR -s S_ -s ES $atend -_s ES -v ve: -w duplAve: -x iks -y ipsilon -z ze: - -_é e: -é $atend - -cs tSe: -dz dze: -dzs dZe: -sz Es -zs Ze: -gy Je: -ty ce: -ly Ellipsilon -ny En^ - -_. pont -Ft foR2int - - - -// Main Exceptions List -//===================== - -nato na:to: - - - diff --git a/espeak-data/voices/bs b/espeak-data/voices/bs index a06b01fc..4307c138 100755 --- a/espeak-data/voices/bs +++ b/espeak-data/voices/bs @@ -1,7 +1,7 @@ name bosnian language bs phonemes hr -dictionary hr +dictionary hbs gender male pitch 81 120 diff --git a/espeak-data/voices/grc b/espeak-data/voices/grc new file mode 100755 index 00000000..a8799222 --- /dev/null +++ b/espeak-data/voices/grc @@ -0,0 +1,8 @@ +name greek-ancient +language grc +gender male + +stressLength 170 170 190 190 0 0 230 240 +dictrules 1 +words 1 + diff --git a/espeak-data/voices/hr b/espeak-data/voices/hr index 29d119b7..f6ff1c5e 100755 --- a/espeak-data/voices/hr +++ b/espeak-data/voices/hr @@ -1,7 +1,10 @@ name croatian language hr +language hbs gender male +dictionary hbs + // attributes towards !variant3 pitch 81 120 formant 0 100 100 100 diff --git a/espeak-data/voices/sr b/espeak-data/voices/sr new file mode 100644 index 00000000..6041a0cd --- /dev/null +++ b/espeak-data/voices/sr @@ -0,0 +1,14 @@ +name serbian +language sr +gender male +dictionary hbs + +// attributes towards !variant3 pitch 80 120 +formant 0 100 100 100 +formant 1 97 97 100 +formant 2 97 97 100 +formant 3 97 102 100 +formant 4 97 102 100 +formant 5 97 102 100 + +stressAdd 10 10 0 0 0 0 -30 -30 diff --git a/espeak-data/voices/zh b/espeak-data/voices/zh new file mode 100644 index 00000000..b7e7036b --- /dev/null +++ b/espeak-data/voices/zh @@ -0,0 +1,29 @@ +name Mandarin test +language zh +gender male +words 1 + +//for some dialects + +//[en]: replace ng with n +//[zh]: Î޺ó±ÇÒô£¬ng¶Á³Én +//replace 0 N n + +//[en]: replace rfx consonants +//[zh]: Î޾íÉàÒô£¬r¶Á³Él»òz£¬er¶Á³Ée +//replace 0 ts.h tsh +//replace 0 ts. ts +//replace 0 s. s +//replace 0 i. i[ +//replace 0 z. l +//replace 0 z. z +//replace 0 @r @ + +//[en]: replace beginning n or l +//[zh]: ²»·Önl£¬n¶Á³Él»òl¶Á³Én +//replace 2 n l +//replace 2 l n + +//[en]: replace beginning w with v +//[zh]: w¶Á³Év +//replace 0 w v \ No newline at end of file diff --git a/phsource/compile_report b/phsource/compile_report index 7ad6a359..5c753326 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -21,9 +21,9 @@ pl 15 107 sk 29 125 cs 6 125 - hr 19 129 - mk 3 130 - sr 2 129 + hr 20 130 + mk 3 131 + sr 18 130 ru 38 126 it 17 118 la 21 114 @@ -95,6 +95,7 @@ d/d_ [d] base [d;] ro [d] el [d] sw +d/d_dnt [d] sr d/dr [*] base [d] base [d[] base @@ -137,6 +138,8 @@ dzh/dzh [dZ] base [dz;] base [J] hi [dZ;] mk + [dZ] sr + [dZ;] sr [dZ;] ru dzh/dzh_ [dZ] base [dZ;] base @@ -197,6 +200,42 @@ g/g_ [g] base g/xg [g] base [g] cy [g] es +h/h_ [h] base + [h] fi + [H] hi + [h] hi + [] la +h/h@ [h] base + [h] fi + [H] hi + [h] hi + [th] hi + [h] sr + [] la +h/ha [h] base + [h] fi + [H] hi + [h] hi + [] la +h/he [h] base + [h] fi + [H] hi + [h] hi + [] la +h/hi [h] base + [h] fi + [H] hi + [h] hi + [] la +h/ho [h] base + [H] hi + [h] hi + [] la +h/hu [h] base + [H] hi + [h] hi + [] la +h/hu_fi [h] fi j2/_j2 [;] base j2/j2@ [(@)] base j2/j2a [(a)] base @@ -302,10 +341,12 @@ l/xl [(@)] base [(o)] base [(u)] base m/_m [m] base + [m] sr [m;] ru [m;] ro [m] zh m/m_ [m] base + [m] sr [m;] ru [m;] ro m/m@ [(@)] base @@ -314,18 +355,24 @@ m/ma [(a)] base m/me [(e)] base m/mi [(i)] base m/mj [m] base + [m] sr [m;] ru [m;] ro m/mo [(o)] base +m/m_sr.wav [m] sr m/mu [(u)] base n^/_n^ [n^] base + [n^] sr n^/n^_ [n^] base + [n^] sr n^/n^@ [(@)] base n^/n^#_ [n^#] is n/_n [n] base + [n] sr [n;] ro [n] zh n/n_ [n] base + [n] sr [n;] ro [n] zh n/n@ [(@)] base @@ -342,12 +389,18 @@ nn/inn [(i)] base n/nj [n] base [n.] base [n^] base + [n] sr + [n^] sr [n;] ro +n^/nj_sr.wav [N] sr + [n^] sr nn/_nn [N] base [N] en + [N] sr [N] zh nn/nn_ [N] base [N] en + [N] sr [N] zh nn/nn@ [(@)] base nn/nn#_ [N#] is @@ -355,12 +408,15 @@ nn/nna [(a)] base nn/nne [(e)] base nn/nni [(i)] base nn/nnj [N] base + [N] sr nn/nno [(o)] base nn/nnu [(u)] base n^/n^o [(o)] base n/no [(o)] base n/_nr [n.] base n/nr_ [n.] base +n/n_sr.wav [N] sr + [n] sr n^/n^u [(u)] base n/nu [(u)] base r2/_r2 [r-] base @@ -382,12 +438,18 @@ r3/r_i [(i)] base r3/r_n [r/] base [r/] ru r3/r_o [(o)] base +r3/r_sr.wav [R] sr + [r*] sr + [r-] sr r3/r_trill [R2] base [R3] base [r] af [r] cy [r] nl [R] sk + [R] sr + [r*] sr + [r-] sr [x] pt r3/r_trill2 [R] base [R] hr @@ -467,6 +529,8 @@ r/xr [(@)] base [(u)] base ufric/ch [C] base [C2] de +ufric/ch_sr [h] sr + [x] sr ufric/f [f] base [pF] de [f;] ro @@ -474,41 +538,6 @@ ufric/f [f] base [f] zh ufric/f_ [f] base [f;] ro -ufric/h_ [h] base - [h] fi - [H] hi - [h] hi - [] la -ufric/h@ [h] base - [h] fi - [H] hi - [h] hi - [th] hi - [] la -ufric/ha [h] base - [h] fi - [H] hi - [h] hi - [] la -ufric/he [h] base - [h] fi - [H] hi - [h] hi - [] la -ufric/hi [h] base - [h] fi - [H] hi - [h] hi - [] la -ufric/ho [h] base - [H] hi - [h] hi - [] la -ufric/hu [h] base - [H] hi - [h] hi - [] la -ufric/hu_fi [h] fi ufric/ll [L] base [l#] is ufric/s [s] base @@ -539,6 +568,9 @@ ufric/sh_pzd [S;] base ufric/sh_pzd_ [S;] base [Z;] base ufric/sh_rfx [s.] base +ufric/sh_sr.wav [S] sr + [Z] sr + [dZ] sr ufric/s_pzd [s;] base [z;] base [s;] ro @@ -554,6 +586,8 @@ ufric/x2 [x2] af [x2] nl [x2] pt ufric/x_hr [x] hr +ufric/x_sr [h] sr + [x] sr ustop/c [c] base ustop/k [k] base [k] en @@ -720,6 +754,7 @@ ustop/t_short [t.] hi [t] el ustop/tsh_pzd [tS;] zh ustop/tsh_pzd_unasp [tS;] zh +ustop/tsh_sr.wav [tS] sr ustop/ts_pzd [tS;] base [ts;] base [ch] hi @@ -728,8 +763,12 @@ ustop/ts_pzd_ [c] hi [c] hu ustop/ts_pzd2 [c] hi [c] hu +ustop/t_sr [d] sr + [t] sr ustop/ts_rfx [ts.] zh ustop/ts_rfx_unasp [ts.] zh +ustop/ts_sr.wav [tS;] sr + [dZ;] sr ustop/ts_unasp [ts] zh ustop/t_unasp [t] zh vdiph/0i [OI] pt @@ -1016,6 +1055,7 @@ voc/z_ [z] base voc/zh [Z] base [z.] base [R^] sk + [Z] sr [Z;] ro voc/zh_ [Z] base [z.] base @@ -1036,6 +1076,7 @@ vowel/@ [@] base [@4] hi [@] hr vowel/@- [@-] base + [r*] hr vowel/& [a] en_rp [&] fi [&:] hi @@ -1083,7 +1124,6 @@ vowel/a [a] en_n [a:] sk [A] hr [a] hr - [a] sr [a] it [a:] la [a] zh diff --git a/phsource/ph_croatian b/phsource/ph_croatian index ff0f29f6..9705d0e6 100644 --- a/phsource/ph_croatian +++ b/phsource/ph_croatian @@ -146,4 +146,12 @@ phoneme R lengthmod 6 endphoneme +phoneme r* + vowel nonsyllabic + starttype (@) endtype (@) + formants vowel/@- + unstressed + appendph * + length 50 +endphoneme diff --git a/phsource/ph_finnish b/phsource/ph_finnish index 4159ee15..097c5885 100644 --- a/phsource/ph_finnish +++ b/phsource/ph_finnish @@ -337,12 +337,12 @@ phoneme h vls glt apr length 100 lengthmod 3 - wave ufric/h_%70 // no vowel following - before (@) ufric/h@ - before (a) ufric/ha - before (e) ufric/he - before (i) ufric/hi - before (o) ufric/hu_fi%70 - before (u) ufric/hu_fi%80 + wave h/h_%70 // no vowel following + before (@) h/h@ + before (a) h/ha + before (e) h/he + before (i) h/hi + before (o) h/hu_fi%70 + before (u) h/hu_fi%80 endphoneme diff --git a/phsource/ph_hindi b/phsource/ph_hindi index 5aaaf9b9..f2461b23 100644 --- a/phsource/ph_hindi +++ b/phsource/ph_hindi @@ -233,26 +233,26 @@ phoneme h // use with voiced aspirated conants [bh] [dh] etc vls glt apr length 100 lengthmod 3 - wave ufric/h_%70 // no vowel following - before (@) ufric/h@+35 - before (a) ufric/ha+35 - before (e) ufric/he+35 - before (i) ufric/hi+35 - before (o) ufric/ho+35 - before (u) ufric/hu+35 + wave h/h_%70 // no vowel following + before (@) h/h@+35 + before (a) h/ha+35 + before (e) h/he+35 + before (i) h/hi+35 + before (o) h/ho+35 + before (u) h/hu+35 endphoneme phoneme H // use for full "h" vls glt apr length 100 lengthmod 3 - wave ufric/h_%70 // no vowel following - before (@) ufric/h@ - before (a) ufric/ha - before (e) ufric/he - before (i) ufric/hi - before (o) ufric/ho - before (u) ufric/hu + wave h/h_%70 // no vowel following + before (@) h/h@ + before (a) h/ha + before (e) h/he + before (i) h/hi + before (o) h/ho + before (u) h/hu endphoneme @@ -345,7 +345,7 @@ phoneme th // dental variant of /t/ Same as [t] for now vowelin f1=0 f2=1500 -300 300 f3=-100 80 vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t_hi%50+ufric/h@ + wave ustop/t_hi%50+h/h@ switchvoicing d endphoneme diff --git a/phsource/ph_latin b/phsource/ph_latin index 2b9b9a88..a6341f0e 100644 --- a/phsource/ph_latin +++ b/phsource/ph_latin @@ -149,13 +149,13 @@ phoneme vls glt apr length 50 lengthmod 3 - wave ufric/h_%70 // no vowel following - before (@) ufric/h@ - before (a) ufric/ha - before (e) ufric/he - before (i) ufric/hi - before (o) ufric/ho - before (u) ufric/hu + wave h/h_%70 // no vowel following + before (@) h/h@ + before (a) h/ha + before (e) h/he + before (i) h/hi + before (o) h/ho + before (u) h/hu endphoneme diff --git a/phsource/ph_serbian b/phsource/ph_serbian index 29bab21b..613d16a0 100644 --- a/phsource/ph_serbian +++ b/phsource/ph_serbian @@ -1,9 +1,222 @@ -// include any phonemes which are different from those -// which are inherited from the base language(s) +// ufric/x_sr +// ufric/ch_sr +// ufric/sh_sr +// ustop/t_sr +// ustop/ts_sr +// ustop/tsh_sr +// r3/r_sr +// m/m_sr +// n/n_sr +// n^/nj_sr -phoneme a - vowel starttype (a) endtype (a) - length 160 - formants vowel/a - reduceto & 4 +// This file inherits phonemes from ph_croatian +// Only phonemes which differ from the inherited phonemes need +// to be included here. + + +phoneme t // dental variant of /t/ + vls dnt stop + vowelin f1=0 f2=1600 -300 300 f3=-100 80 + vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 + lengthmod 2 + wave ustop/t_sr%50 + before _ ustop/t_sr%35 + switchvoicing d +endphoneme + + +phoneme d + vcd alv stop + vowelin f1=2 f2=1700 -300 300 f3=-100 80 amp=16 + vowelout f1=2 f2=1700 -300 300 f3=-100 80 + formants d/d_dnt+ustop/t_sr%50 + before _ d/d_dnt+ustop/t_sr + before r d/d_dnt+ustop/t_sr%50 + after _ d/d_dnt+ustop/t_sr + after @ d/d_dnt+ustop/t_sr + lengthmod 5 + switchvoicing t +endphoneme + + +// This is for letter "h" at the beginning of a word +phoneme x + vls vel frc + lengthmod 3 + wave ufric/x_sr%70 // no vowel following + before (a) ufric/x_sr + before (e) ufric/ch_sr + before (i) ufric/ch_sr + before (o) ufric/x_sr + before (u) ufric/x_sr +endphoneme + + +// This is for letter "h" not at the beginning of word +phoneme h + vls vel frc + lengthmod 3 + wave ufric/x_sr%70 // no vowel following + before (@) h/h@ + before (a) ufric/x_sr + before (e) ufric/ch_sr + before (i) ufric/ch_sr + before (o) ufric/x_sr + before (u) ufric/x_sr +endphoneme + + + +phoneme R + liquid + vowelin f1=0 f2=1600 -300 300 f3=-200 80 + vowelout f1=2 f2=1600 -300 300 f3=-200 80 brk + formants r3/r_trill+r3/r_sr.wav%65 + after & r3/r_trill+r3/r_sr.wav + after e r3/r_trill+r3/r_sr.wav + after i r3/r_trill+r3/r_sr.wav + after o r3/r_trill+r3/r_sr.wav + after u r3/r_trill+r3/r_sr.wav + after y r3/r_trill+r3/r_sr.wav + trill + lengthmod 6 +endphoneme + +// This is "r" which doesn't follow a vowel +phoneme r* + liquid + vowelin f1=0 f2=1600 -300 300 f3=-200 80 + vowelout f1=2 f2=1600 -300 300 f3=-200 80 brk + formants r3/r_trill+r3/r_sr.wav%65 + trill + lengthmod 6 +endphoneme + +// This is "r" which doesn't have a vowel before or after it +phoneme r- + liquid + vowelin f1=0 f2=1600 -300 300 f3=-200 80 + vowelout f1=2 f2=1600 -300 300 f3=-200 80 brk + formants r3/r_trill+r3/r_sr.wav%65 + trill + lengthmod 6 +endphoneme + + + +phoneme dZ + vcd pla afr sibilant + vowelin f1=2 f2=2300 200 400 f3=100 80 + vowelout f1=2 f2=2300 250 300 f3=100 80 brk + formants dzh/dzh+ufric/sh_sr.wav + before _ dzh/dzh+ufric/sh_sr.wav + after _ NULL + after @ dzh/dzh+ufric/sh_sr.wav + lengthmod 5 + switchvoicing tS +endphoneme + + +phoneme dZ; + vcd pla afr sibilant palatal + vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 + formants dzh/dzh+ustop/ts_sr.wav + before _ dzh/dzh+ustop/ts_sr.wav + after _ NULL + after @ dzh/dzh+ustop/ts_sr.wav + lengthmod 5 + switchvoicing tS; +endphoneme + + +phoneme tS + vls pla afr sibilant + vowelin f1=0 f2=2300 200 400 f3=-100 80 + lengthmod 2 + wave ustop/tsh_sr.wav + before _ ustop/tsh_sr.wav + switchvoicing dZ +endphoneme + + +phoneme tS; + vls pal afr sibilant palatal + vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 + lengthmod 2 + wave ustop/ts_sr.wav + before _ ustop/ts_sr.wav + switchvoicing dZ; +endphoneme + + +phoneme Z + vcd pla frc sibilant + vowelin f1=0 f2=2000 0 300 f3=-200 80 + vowelout f1=2 f2=2000 0 300 f3=-200 80 brk + formants voc/zh+ufric/sh_sr.wav + before _ voc/zh+ufric/sh_sr.wav + lengthmod 6 + switchvoicing S +endphoneme + + +phoneme S + vls pla frc sibilant + vowelin f1=0 f2=2100 100 300 f3=-100 80 + vowelout f1=0 f2=2100 100 300 f3=-100 80 + length 100 + lengthmod 3 + wave ufric/sh_sr.wav + before _ ufric/sh_sr.wav + switchvoicing Z +endphoneme + + +phoneme m + vcd blb nasal + vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk + length 100 + lengthmod 4 + formants NULL + after _ m/_m+m/m_sr.wav + before _ m/m_+m/m_sr.wav + before (r) m/mj+m/m_sr.wav +endphoneme + + +phoneme n + vcd alv nasal + vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk + length 100 + lengthmod 4 + formants NULL + after _ n/_n+n/n_sr.wav + after n n/_n+n/n_sr.wav // lengthen [nn] + before _ n/n_+n/n_sr.wav + before (r) n/nj+n/n_sr.wav +endphoneme + + +phoneme n^ + vcd pal nasal palatal + vowelout f1=3 f2=2500 300 500 f3=100 80 len=45 brk rate + length 100 + lengthmod 4 + formants NULL + after _ n^/_n^+n^/nj_sr.wav + before _ n^/n^_+n^/nj_sr.wav + before (r) n/nj+n^/nj_sr.wav +endphoneme + + +phoneme N + vcd vel nasal +// vowelout brk + vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk + length 100 + formants NULL + after _ nn/_nn+n/n_sr.wav + before _ nn/nn_+n/n_sr.wav + before (r) nn/nnj+n^/nj_sr.wav + lengthmod 8 // longer than 'n' endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index 2b9df916..4230552c 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -27,7 +27,8 @@ phonemenumber 20 - // syllabic consonant phonemenumber 21 _^_ // Change language phonemenumber 22 _X1 // a language specific action phonemenumber 23 _| // very short pause -phonemenumber 24 t# // reduced version of [t] +phonemenumber 24 _:: // long pause +phonemenumber 25 t# // reduced version of [t] // The base phoneme table contains the utility phonemes, the consonants, // and a schwa. The vowels are defined in the language specific phoneme @@ -148,6 +149,7 @@ phoneme ? // glottal stop starttype _ endtype _ length 45 lengthmod 5 // ?? + beforenotvowel _ // change to pause_short nolink endphoneme @@ -1109,13 +1111,13 @@ phoneme h vls glt apr length 100 lengthmod 3 - wave ufric/h_%70 // no vowel following - before (@) ufric/h@ - before (a) ufric/ha - before (e) ufric/he - before (i) ufric/hi - before (o) ufric/ho - before (u) ufric/hu + wave h/h_%70 // no vowel following + before (@) h/h@ + before (a) h/ha + before (e) h/he + before (i) h/hi + before (o) h/ho + before (u) h/hu endphoneme diff --git a/phsource/ufric/ch_sr.wav b/phsource/ufric/ch_sr.wav new file mode 100644 index 00000000..b19c6ef7 Binary files /dev/null and b/phsource/ufric/ch_sr.wav differ diff --git a/phsource/ufric/h@.wav b/phsource/ufric/h@.wav deleted file mode 100644 index c851d447..00000000 Binary files a/phsource/ufric/h@.wav and /dev/null differ diff --git a/phsource/ufric/h_.wav b/phsource/ufric/h_.wav deleted file mode 100644 index 6dbc5ef1..00000000 Binary files a/phsource/ufric/h_.wav and /dev/null differ diff --git a/phsource/ufric/ha.wav b/phsource/ufric/ha.wav deleted file mode 100644 index 4268dcf9..00000000 Binary files a/phsource/ufric/ha.wav and /dev/null differ diff --git a/phsource/ufric/he.wav b/phsource/ufric/he.wav deleted file mode 100644 index 4ee15cd5..00000000 Binary files a/phsource/ufric/he.wav and /dev/null differ diff --git a/phsource/ufric/hi.wav b/phsource/ufric/hi.wav deleted file mode 100644 index 320df58d..00000000 Binary files a/phsource/ufric/hi.wav and /dev/null differ diff --git a/phsource/ufric/ho.wav b/phsource/ufric/ho.wav deleted file mode 100644 index d75fc9f6..00000000 Binary files a/phsource/ufric/ho.wav and /dev/null differ diff --git a/phsource/ufric/hu.wav b/phsource/ufric/hu.wav deleted file mode 100644 index 16cc4f8c..00000000 Binary files a/phsource/ufric/hu.wav and /dev/null differ diff --git a/phsource/ufric/hu_fi.wav b/phsource/ufric/hu_fi.wav deleted file mode 100644 index 7c2494bb..00000000 Binary files a/phsource/ufric/hu_fi.wav and /dev/null differ diff --git a/phsource/ufric/sh_sr.wav b/phsource/ufric/sh_sr.wav new file mode 100644 index 00000000..3e7abc30 Binary files /dev/null and b/phsource/ufric/sh_sr.wav differ diff --git a/phsource/ufric/x_sr.wav b/phsource/ufric/x_sr.wav new file mode 100644 index 00000000..a924bb9c Binary files /dev/null and b/phsource/ufric/x_sr.wav differ diff --git a/phsource/ustop/t_sr.wav b/phsource/ustop/t_sr.wav new file mode 100644 index 00000000..9079e872 Binary files /dev/null and b/phsource/ustop/t_sr.wav differ diff --git a/phsource/ustop/ts_sr.wav b/phsource/ustop/ts_sr.wav new file mode 100644 index 00000000..4ac230da Binary files /dev/null and b/phsource/ustop/ts_sr.wav differ diff --git a/phsource/ustop/tsh_sr.wav b/phsource/ustop/tsh_sr.wav new file mode 100644 index 00000000..a9e63ac8 Binary files /dev/null and b/phsource/ustop/tsh_sr.wav differ diff --git a/phsource/vdiph2/ei_4 b/phsource/vdiph2/ei_4 new file mode 100644 index 00000000..ba273eab Binary files /dev/null and b/phsource/vdiph2/ei_4 differ diff --git a/phsource/vdiph2/vowelchart.png b/phsource/vdiph2/vowelchart.png index 75c71829..447a36b2 100644 Binary files a/phsource/vdiph2/vowelchart.png and b/phsource/vdiph2/vowelchart.png differ diff --git a/phsource/vowel/u_7 b/phsource/vowel/u_7 index f84a3452..3d5bab17 100644 Binary files a/phsource/vowel/u_7 and b/phsource/vowel/u_7 differ diff --git a/phsource/vwl_en_us/a b/phsource/vwl_en_us/a index 4ccbbf1d..cec2f646 100644 Binary files a/phsource/vwl_en_us/a and b/phsource/vwl_en_us/a differ diff --git a/src/compiledata.cpp b/src/compiledata.cpp index 37bf526d..825a471a 100755 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -2072,11 +2072,15 @@ wxString CompileAllDictionaries() int err; int errors = 0; int dict_count = 0; + FILE *f_in; FILE *log; FILE *f_phused; char dictname[80]; char fname_log[sizeof(path_dsource)+20]; char save_voice_name[80]; + char path[sizeof(path_home)+40]; // path_dsource+20 + char buf[200]; + char voicename[80]; if(!wxDirExists(path_dictsource)) { @@ -2121,8 +2125,38 @@ wxString CompileAllDictionaries() dictstr = fname.GetName().BeforeLast('_'); strcpy(dictname,dictstr.mb_str(wxConvLocal)); dict_count++; + strcpy(voicename,dictname); - LoadVoice(dictname,0); + // read the *_rules file to see if a phoneme table is specified though a voice name + sprintf(path,"%s%s_rules",path_dsource,dictname); + if((f_in = fopen(path,"r")) != NULL) + { + unsigned int ix; + unsigned int c; + + for(ix=0; ix<20; ix++) + { + if(fgets(buf,sizeof(buf),f_in) == NULL) + break; + + if(memcmp(buf,"//voice=",8)==0) + { + for(ix=0; ix 0) { diff --git a/src/compiledict.cpp b/src/compiledict.cpp index 092920a7..4ed5dbcf 100755 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -34,6 +34,7 @@ //#define OPT_FORMAT // format the text and write formatted copy to Log file //#define OUTPUT_FORMAT +extern void Write4Bytes(FILE *f, int value); int HashDictionary(const char *string); static FILE *f_log = NULL; @@ -1378,8 +1379,8 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) } if(replace1 != 0) { - fwrite(&replace1,1,4,f_out); - fwrite(&replace2,1,4,f_out); + Write4Bytes(f_out,replace1); // write as little-endian + Write4Bytes(f_out,replace2); // if big-endian, reverse the bytes in LoadDictionary() } } break; diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 68d945f6..69238cc8 100755 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -86,6 +86,21 @@ void strncpy0(char *to,const char *from, int size) to[size-1] = 0; } +#ifdef ARCH_BIG +int reverse_word_bytes(int word) +{//============================= + // reverse the order of bytes from little-endian to big-endian + int ix; + int word2 = 0; + + for(ix=24; ix>=0; ix -= 8) + { + word2 |= (word >> ix) & 0xff; + word2 = word2 << 8; + } + return(word2); +} +#endif int LookupMnem(MNEM_TAB *table, char *string) @@ -237,6 +252,15 @@ void Translator::InitGroups(void) pw += 2; // find the end of the replacement list, each entry is 2 words. } p = (char *)(pw+1); + +#ifdef ARCH_BIG + pw = (unsigned int *)langopts.replace_chars; + while(*pw != 0) + { + *pw = reverse_word_bytes(*pw); + pw++; + } +#endif continue; } @@ -1280,23 +1304,19 @@ void Translator::SetWordStress(char *output, unsigned int dictionary_flags, int if((ph = phoneme_tab[*p]) != NULL) { - int gap = langopts.word_gap & 0xf00; if(ph->type == phSTRESS) ph = phoneme_tab[p[1]]; - if(((gap) && (vowel_stress[1] >= 4) && (prev_stress >= 4)) || (langopts.word_gap & 0x8)) +#ifdef deleted + int gap = langopts.word_gap & 0x700; + if((gap) && (vowel_stress[1] >= 4) && (prev_stress >= 4)) { /* two primary stresses together, insert a short pause */ - if(gap == 0x0300) - *output++ = phonPAUSE; - else - if((gap == 0x0200) && (ph->type == phVOWEL)) - *output++ = phonGLOTTALSTOP; - else - *output++ = phonPAUSE_SHORT; + *output++ = pause_phonemes[gap >> 8]; } else +#endif if((langopts.vowel_pause & 0x30) && (ph->type == phVOWEL)) { // word starts with a vowel diff --git a/src/phoneme.h b/src/phoneme.h index 54c9b50d..c35cc156 100755 --- a/src/phoneme.h +++ b/src/phoneme.h @@ -81,8 +81,9 @@ #define phonSWITCH 21 #define phonX1 22 // a language specific action #define phonPAUSE_VSHORT 23 -#define phonT_REDUCED 24 - +#define phonPAUSE_LONG 24 +#define phonT_REDUCED 25 +extern const unsigned char pause_phonemes[8]; // 0, vshort, short, pause, long, glottalstop // place of articulation #define phPLACE 0xf0000 diff --git a/src/phonemelist.cpp b/src/phonemelist.cpp index daaff7c4..b749382c 100755 --- a/src/phonemelist.cpp +++ b/src/phonemelist.cpp @@ -30,6 +30,7 @@ #include "translate.h" +const unsigned char pause_phonemes[8] = {0, phonPAUSE_VSHORT, phonPAUSE_SHORT, phonPAUSE, phonPAUSE_LONG, phonGLOTTALSTOP, phonPAUSE_LONG, phonPAUSE_LONG}; int Translator::ChangePhonemes(PHONEME_LIST2 *phlist, int n_ph, int index, PHONEME_TAB *ph, CHANGEPH *ch) @@ -497,10 +498,6 @@ void Translator::MakePhonemeList(int post_pause, int start_sentence) { int x; - if(langopts.word_gap & 1) - { - insert_ph = phonPAUSE_VSHORT; - } if(langopts.vowel_pause && (ph->type != phPAUSE) && (next->type == phVOWEL)) { if(langopts.vowel_pause & 0x04) @@ -524,6 +521,11 @@ void Translator::MakePhonemeList(int post_pause, int start_sentence) insert_ph = phonPAUSE_SHORT; } } + + if((x = (langopts.word_gap & 0x7)) != 0) + { + insert_ph = pause_phonemes[x]; + } } next2 = phoneme_tab[(plist2+2)->phcode]; @@ -540,7 +542,7 @@ void Translator::MakePhonemeList(int post_pause, int start_sentence) } } else - if(((langopts.word_gap & 2)==0) || ((plist2+1)->sourceix == 0)) + if(((langopts.word_gap & 8)==0) || ((plist2+1)->sourceix == 0)) { // This phoneme can be linked to a following vowel by inserting a linking phoneme if(next->type == phVOWEL) diff --git a/src/setlengths.cpp b/src/setlengths.cpp index 9ae577d5..e66616ef 100755 --- a/src/setlengths.cpp +++ b/src/setlengths.cpp @@ -455,7 +455,7 @@ void Translator::CalcLengths() { len = langopts.length_mods0[next2->ph->length_mod *10+ next->ph->length_mod]; - if((next->newword) && (langopts.word_gap & 0x4)) + if((next->newword) && (langopts.word_gap & 0x20)) { // consider as a pause + first phoneme of the next word length_mod = (len + langopts.length_mods0[next->ph->length_mod *10+ 1])/2; diff --git a/src/speak.cpp b/src/speak.cpp index 89fa071a..7dd944f6 100755 --- a/src/speak.cpp +++ b/src/speak.cpp @@ -221,12 +221,13 @@ void MarkerEvent(int type, unsigned int char_position, int value, unsigned char -static void init_path(void) -{//======================== +static void init_path(char *argv0) +{//=============================== #ifdef PLATFORM_WINDOWS HKEY RegKey; unsigned long size; unsigned long var_type; + char *p; char *env; unsigned char buf[sizeof(path_home)-12]; @@ -234,9 +235,18 @@ static void init_path(void) { sprintf(path_home,"%s\\espeak-data",env); if(GetFileLength(path_home) == -2) - return; // an espeak-data directory exists + return; // an espeak-data directory exists in the directory specified by environment variable } + strcpy(path_home,argv0); + if((p = strrchr(path_home,'\\')) != NULL) + { + strcpy(&p[1],"espeak-data"); + if(GetFileLength(path_home) == -2) + return; // an espeak-data directory exists in the same directory as the espeak program + } + + // otherwise, look in the Windows Registry buf[0] = 0; RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Speech\\Voices\\Tokens\\eSpeak", 0, KEY_READ, &RegKey); size = sizeof(buf); @@ -383,7 +393,7 @@ int main (int argc, char **argv) option_multibyte = espeakCHARS_AUTO; // auto f_trans = stdout; - init_path(); + init_path(argv[0]); #ifdef NEED_GETOPT optind = 1; diff --git a/src/speech.h b/src/speech.h index 8e416443..686669e8 100755 --- a/src/speech.h +++ b/src/speech.h @@ -63,8 +63,12 @@ typedef struct { int LookupMnem(MNEM_TAB *table, char *string); +#ifdef PLATFORM_WINDOWS +#define N_PATH_HOME 220 +#else +#define N_PATH_HOME 150 +#endif -#define N_PATH_HOME 120 extern char path_home[N_PATH_HOME]; // this is the espeak-data directory extern void strncpy0(char *to,const char *from, int size); diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 42b6c002..090928fe 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.29.17 08.Nov.07"; +const char *version_string = "1.29.18 10.Nov.07"; const int version_phdata = 0x012901; int option_device_number = -1; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index da505426..01fb155b 100755 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -1142,16 +1142,6 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) DoMarker(espeakEVENT_WORD, (p->sourceix & 0x7ff) + clause_start_char, p->sourceix >> 11, clause_start_word + word_count++); } - if((translator->langopts.word_gap & 1) || (translator->langopts.vowel_pause && (next->type == phVOWEL))) - { - // prevent word merging into next, make it look as though next is a pause - if((next->newword) && (next->type != phPAUSE)) - { -// next_pause.ph = phoneme_tab[phonPAUSE]; -// next = &next_pause; - } - } - EndAmplitude(); if(p->prepause > 0) diff --git a/src/tr_english.cpp b/src/tr_english.cpp index acf66917..6818d584 100644 --- a/src/tr_english.cpp +++ b/src/tr_english.cpp @@ -40,9 +40,7 @@ Translator_English::Translator_English() : Translator() static const short stress_lengths2[8] = {182,140, 220,220, 0,0, 248,275}; memcpy(stress_lengths,stress_lengths2,sizeof(stress_lengths)); - langopts.vowel_pause = 0; langopts.stress_rule = 0; - langopts.word_gap = 0; langopts.numbers = 0x41 + NUM_ROMAN; } diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 16d0b4ba..41e85e61 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -123,8 +123,6 @@ Translator *SelectTranslator(const char *name) // 'diminished' is an unstressed final syllable tr->langopts.stress_flags = 0x6 | 0x10; - tr->langopts.word_gap = 0; - tr->langopts.vowel_pause = 0; tr->langopts.unstressed_wd1 = 0; tr->langopts.unstressed_wd2 = 2; tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels @@ -141,7 +139,7 @@ Translator *SelectTranslator(const char *name) static const short stress_lengths_de[8] = {150,130, 190,190, 0, 0, 260,275}; tr = new Translator(); tr->langopts.stress_rule = 0; - tr->langopts.word_gap = 0x2; // don't use linking phonemes + tr->langopts.word_gap = 0x8; // don't use linking phonemes tr->langopts.vowel_pause = 0x30; tr->langopts.param[LOPT_PREFIXES] = 1; memcpy(tr->stress_lengths,stress_lengths_de,sizeof(tr->stress_lengths)); @@ -184,8 +182,6 @@ Translator *SelectTranslator(const char *name) tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.stress_rule = 2; tr->langopts.stress_flags = 0x6; // mark unstressed final syllables as diminished - tr->langopts.word_gap = 0; - tr->langopts.vowel_pause = 0; tr->langopts.unstressed_wd1 = 0; tr->langopts.unstressed_wd2 = 2; tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels @@ -238,8 +234,6 @@ Translator *SelectTranslator(const char *name) // stress last syllable if it doesn't end in vowel or "s" or "n" // 'diminished' is an unstressed final syllable tr->langopts.stress_flags = 0x200 | 0x6 | 0x10; - tr->langopts.word_gap = 0; - tr->langopts.vowel_pause = 0; tr->langopts.unstressed_wd1 = 0; tr->langopts.unstressed_wd2 = 2; tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels @@ -398,7 +392,6 @@ SetLengthMods(tr,3); // all equal tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.stress_rule = 2; - tr->langopts.word_gap = 0; tr->langopts.vowel_pause = 1; tr->langopts.unstressed_wd1 = 2; tr->langopts.unstressed_wd2 = 2; @@ -449,7 +442,6 @@ SetLengthMods(tr,3); // all equal tr = new Translator(); tr->langopts.stress_rule = 0; - tr->langopts.word_gap = 0; tr->langopts.vowel_pause = 1; tr->langopts.param[LOPT_DIERESES] = 1; tr->langopts.param[LOPT_PREFIXES] = 1; @@ -637,7 +629,7 @@ SetLengthMods(tr,3); // all equal tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.stress_rule = 0; - tr->langopts.word_gap = 0x4; // length of a final vowel is less dependent on the next consonant + tr->langopts.word_gap = 0x20; // length of a final vowel is less dependent on the next consonant tr->langopts.vowel_pause = 4; tr->letter_groups[0] = vowels_vi; // tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words @@ -650,7 +642,7 @@ SetLengthMods(tr,3); // all equal case L('z','h'): case L_zhy: { - static const short stress_lengths_zh[8] = {220,150, 230,230, 230,0, 230,250}; + static const short stress_lengths_zh[8] = {230,150, 230,230, 230,0, 230,250}; static const unsigned char stress_amps_zh[] = {22,16, 22,22, 22,22, 22,22 }; tr = new Translator; @@ -663,7 +655,7 @@ SetLengthMods(tr,3); // all equal tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.tone_numbers = 1; // a number after letters indicates a tone number (eg. pinyin or jyutping) tr->langopts.ideographs = 1; - tr->langopts.word_gap = 0x5; // length of a final vowel is less dependent on the next consonant, don't merge consonant with next word + tr->langopts.word_gap = 0x21; // length of a final vowel is less dependent on the next consonant, don't merge consonant with next word if(name2 == L('z','h')) { tr->langopts.textmode = 1; @@ -955,7 +947,6 @@ Translator_Afrikaans::Translator_Afrikaans() : Translator() static const short stress_lengths2[8] = {170,140, 220,220, 0, 0, 250,270}; langopts.stress_rule = 0; - langopts.word_gap = 0; langopts.vowel_pause = 0x30; langopts.param[LOPT_DIERESES] = 1; langopts.param[LOPT_PREFIXES] = 1; diff --git a/src/translate.h b/src/translate.h index a7446735..b32ce27d 100755 --- a/src/translate.h +++ b/src/translate.h @@ -254,11 +254,10 @@ extern const int param_defaults[N_SPEECH_PARAM]; typedef struct { -// bit0=don't link consonants with the next word -// bit1=don't add linking phonemes -// bit2=length of a final vowel doesn't depend on the next phoneme +// bits0-2 separate words with (1=pause_vshort, 2=pause_short, 3=pause, 4=pause_long 5=[?] phonemme) +// bit 3=don't use linking phoneme // bit4=longer pause before STOP, VSTOP,FRIC -// bit8-11=separate words with adjacent stressed syllables with (1=pause, 2=long pausem 3=[?] phoneme) +// bit5=length of a final vowel doesn't depend on the next phoneme int word_gap; int vowel_pause; int stress_rule; // 1=first syllable, 2=penultimate, 3=last