From 9172b74343514f8cc7ce01dc352a8809cb00b0fb Mon Sep 17 00:00:00 2001 From: jonsd Date: Wed, 20 Feb 2013 13:58:44 +0000 Subject: [PATCH] [1.46.36] espeakedit: Prosody window now shows the FMT() or WAV() filename and the standard length of the selected phoneme. Added the ability to produce speech at different sample rates. To use rates other than the default 22050Hz, the phoneme data must be recompiled. This needs the "sox" program to be available. (sox.sourceforge.net). espeakedit: Added menu option to compile the phoneme data at a specified sample rate (rather than the default 22050Hz). phondata: Includes the value of the sample rate at which the data was compiled. Language changes: pt. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@302 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/dict_phonemes | 12 +- dictsource/en_list | 2 + dictsource/en_rules | 13 +- dictsource/pt_list | 2646 ++++++++--------- dictsource/pt_rules | 2113 ++++++------- dictsource/vi_rules | 1498 +++++----- espeak-data/voices/en/en-us | 2 +- phsource/compile_report | 90 +- phsource/n/nri | Bin 1637 -> 1637 bytes phsource/n/nro | Bin 1593 -> 1593 bytes phsource/n/nru | Bin 1667 -> 1667 bytes phsource/ph_english_us | 11 +- phsource/ph_pt_brazil | 13 +- phsource/ph_vietnam | 22 +- phsource/phonemes | 13 +- phsource/vdiph2/uw_6 | Bin 6774 -> 8580 bytes phsource/vowel/oe | Bin 3351 -> 3784 bytes platforms/big_endian/espeak-phoneme-data.c | 6 +- platforms/windows/espeakedit/src/speech.h | 1 + .../windows/espeakedit/src_copy/speech.h | 1 + src/compiledata.cpp | 147 +- src/dictionary.cpp | 4 - src/espeakedit.cpp | 40 +- src/extras.cpp | 40 +- src/main.h | 1 + src/menus.cpp | 3 +- src/numbers.cpp | 52 +- src/options.cpp | 21 +- src/prosodydisplay.cpp | 91 +- src/readclause.cpp | 9 +- src/speak.cpp | 7 +- src/speak_lib.cpp | 6 +- src/synthdata.cpp | 27 +- src/synthesize.cpp | 9 +- src/synthesize.h | 9 +- src/translate.cpp | 2 + src/transldlg.cpp | 6 +- 37 files changed, 3565 insertions(+), 3352 deletions(-) diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 1519b180..ed6a2779 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -103,7 +103,7 @@ p Q r R s s; t T ts v x z -Dictionary en_dict 2013-02-13 +Dictionary en_dict 2013-02-20 0 0# 3 3: @ @- @2 @5 @L a a# A: A@ aa aI aI3 @@ -377,7 +377,7 @@ S s; S; t t; tS ts tS; ts; v w x z Z Z; -Dictionary pt_dict 2013-02-14 +Dictionary pt_dict 2013-02-19 & &/ &U~ &~ @ @- a A aI aU e E eI EI eU EU @@ -489,13 +489,13 @@ p Q r R s S t tS v w z Z -Dictionary vi_dict 2013-02-10 +Dictionary vi_dict 2013-02-16 @ @: @:I @:U @I @U a a: a:I a:U aI aU e E eU EU -i i@ iU o O o# O# o& -o@ OI oI u u@ uI y y@ -yI +i i@ iE iU o O o# O# +o& o@ OI oI u u@ uI y +y@ yI b c cr d D f g h j J J^ k kh l m n diff --git a/dictsource/en_list b/dictsource/en_list index ec42a441..37fa1abb 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -1022,6 +1022,7 @@ concerto k@ntS'e@toU conches k0ntSI#z concierge k0nsI'e@Z concise k0#ns'aIs +conclave $1 conduct $1 conduct $verb cone koUn @@ -1136,6 +1137,7 @@ deli dElI deliberate dI2lIb@r@t delicate dElI2k@t delimit dI2lImIt // delimited +delivery $alt2 demolish dI2m0lIS demon di:m@n demoness di:m@nEs diff --git a/dictsource/en_rules b/dictsource/en_rules index 8a1af8a6..3aaa5016 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -1771,6 +1771,7 @@ di (ox d%aI _) di (s@ dI2 _) di (sa@ ,dI + _) di (sarm dI2 _) disa (p ,dIs@ di (sast dI2 di (sbe@ ,dI @@ -2467,6 +2468,7 @@ er (ve 3: s) er (van 3: ery (_ @r%i +?3 ery (_++$w_alt2 @rI ?3 @@AC) ery (_ e@ri ery (A 3j _v) ery ErI2 @@ -2745,6 +2747,8 @@ gue (_ g gu (e g _) gu (i g + _) gui (dA gaI + guide (@ gaId _) g (yn g o) g (y_ g g (ynous_ =dZ @@ -3262,7 +3266,7 @@ inter (est Intr interfer Int@f'i@3 _) int (erio+ %Int - _) inter (n_ %Int3: + _) inter (nK %Int3: _) inter (nal %Int3: _) inter (pr %Int3: _) inter (pol@ %Int3: @@ -4576,7 +4580,7 @@ pull) ov oUv m) ov (A u:v n) ov (el 0v - p) over (@ 0v@ + p) over (@ 0v3 pr) ov (e# u:v gr) ov (el 0v tr) ov (er 0v @@ -4942,6 +4946,8 @@ _) re (i@P2 r,i: _) rei (c raI _) rei (l raI + _) rei (s raI + _) re (iss r%i: _) rele (g rElI2 rele (nt rI2lE rele (v rElI# @@ -5122,9 +5128,8 @@ 1_) st (_ _) st (_ s@nt stein staIn - ti) ssue Su: _) s (u s - ss (ue S + ssue Su: ssur S3 a) ssur SU@ a) ssure S'U@ diff --git a/dictsource/pt_list b/dictsource/pt_list index 09ec4a4a..8451ed71 100755 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -1,1323 +1,1323 @@ - -// This file in UTF8 encoded - -// Options -// ?1 European Portuguese -// ?2 Brazilian Portuguese -// ?3 Epenthetic [I] between consonants -// ?4 Brazil mbrola voice - -// $alt change [e] or [o] in the stressed syllable to [E] or [O] -// $alt2 change [E] or [O] in the stressed syllable to [e] or [o] -// Any [E] or [O] phonemes in unstressed words must be listed explicitly - - -// Note for "pt-pt" [R] is the same sound as [r] -// for "pt" [y] is the same sound as [i] - - -// Letters -// If a letter has a "word" pronunciation which is different from its -// "letter" name, then include the letter name here, with the letter -// prefixed by a _ character. - -// accent names -_lig ligad'u*& -_acu &g'udU -_ac2 &g'udUd'uplU -_brv bR'Evi -_ced sedZ'ilj& -?1 _ced syd'il^& -_cir sirku~Nfl'EksU -_dia tR'em& -_dot p'oNtU -_grv gR'avi -_hac ka*'oN -_mcn makR'oN -_ogo ogon'ek -_rng &~n'EU -?1 _rng &~n'El -_stk b'ax& -_tld tS'iU -?1 _tld til - - -// character names - -á $accent -_à $accent // à can be a word -â $accent -ã $accent -ç $accent -_é $accent // é can be a word -ê $accent -í $accent -ó $accent -ô $accent -õ $accent -ú $accent -ü $accent -ß _^_DE - -v ve // not Roman numbers -x Sis# - -_cap maI'uskulU -_?A l'etR&_ -_?? s'imbolU_ -_#32 esp'asU -?1 _#32 Sp'asU -_#9 tab - -* &ste*'iskU $max3 -= __igw'&l_ $max3 -. p'oNtU $max3 -+ maIs# $max3 -% pors'eINtU $max3 -& _'e_ -@ &x'ob& -¤ 'eU*U -€ 'eU*U -§ p&*'agRafU - - -_! ,eskl&mas'&U~ -_" 'asp&s# - -?1 _# k,ardin'al -?2 _# k,ardZin'aU -_$ s,ifR'&U~ -_& 'e -?1 _' ap'Ostr,ofy -?2 _' &p'OstRofU -_( ,abRipa*'eINtezy -_) f,ES&pa*'eINtezy -_* &ste*'iskU -_− m'enUs - -_, v'irgul& -_- 'ifeIN -_/ b'aQ& -_: d,oIsp'oNtus -_; p,oNtu_iv'irgul& -_< men'Or -?1 _= igw'al -?2 _= igw'aU -_> maI'Or -_? ,iNtex,ogas'&U~ -_[ ,abRikowS'etSi -_\ b,ax&,iNvertS'id& -_] f,ES&kowS'etSi -_^ s,irku~Nfl'Eksu -__ s,ublin^'adu -_` gR'avi -_{ ,abRiS'avi -?1 _| b,ax&v,ertSik'al -?2 _| b,ax&v,ertSik'aU -_} f,ES&S'avi -?1 _~ t'il -?2 _~ tS'iU -_¡ ,eskl&mas,&U~,iNvertS'id& -_¿ ,iNtex,ogas,&U~,iNvertS'id& - -_" 'abRi;'asp&||d'upl&s# -_º Oz'in^U -_ª az'in^U -° gR'aU - - -// numeric -//******** - -?1 _0 z'E*u -?2 _0 z'E*U -?1 _1 'um -?2 _1 'u~N - _2 d'oIs# - _3 tR'es# -?1 _4 kw'atru -?2 _4 kw'atRu - _5 s'iNku - _6 s'eIs# -?1 _7 s'Ety -?2 _7 s'EtSy - _8 'oItu - _9 n'Ovy - _10 d'Es# - -_11 'oNzy -_12 d'ozy -?1_13 tr'ezy -?2_13 tR'ezi -?1_14 k&t'orzy -?2_14 kat'orzy -_15 k'iNzy -?1_16 dyz&s'eis# -?2_16 d,ezes'eIs# -?1_17 dyz&s'Ety -?2_17 d,ezes'EtSy -?1_18 dyz'Oitu -?2_18 dez'oItu -?1_19 dyz&n'Ovy -?2_19 dezen'Ovy -?1_2X v'iNty -?2_2X v'iNtSy -_3X tR'iNt& - -?1_4X kw&*'eNt& -?2_4X kwa*'eINt& -_5X siNkw'eINt& -?1_6X sys'eINt& -?2_6X ses'eINt& -?1_7X syt'eINt& -?2_7X set'eINt& -_8X oIt'eINt& -?1 _9X nuv'eINt& -?2 _9X nov'eINt& -_1C0 s'eIN -?1_0C s'eINtus# -?2_0C s'eINtUs# -_1C s'eINtu -?1_2C duz'eINtus# -?2_2C duz'eINtUz -?1_3C tryz'eNtus# -?2_3C tRez'eNtUz -?1_5C kin^'eINtus# -?2_5C kin^'eINtUz -?1_0M1 m'il_ -?2_0M1 m'iU_ -?1_1M1 m'il_ -?2_1M1 m'iU_ - -?1_0M2 milj'o~js# -?2_0M2 milj'o~jz -_1M2 'u~milj'&U~ -?1_0M3 bilj'o~js# -?2_0M3 bilj'o~jz -_1M3 'u~mbilj'&U~ -?1_0M4 trilj'o~js# -?2_0M4 trilj'o~jz -_1M4 'u~ntrilj'&U~ -_0and i -_dpt _v'irgul& -// _0Z2 seNt'Ezim& // 100ths -// _0Z3 mil'Ezim& // 1000ths - -// ordinal numbers -_#º U -_#ª & -_ord o - -_1o pRim'eI* -_2o seg'u~Nd -_3o te*@-s'eI* -_4o kw'a*@-t -_5o k'iNt -_6o s'est -_7o s'EtSim -_8o oIt'av -_9o n'on -_1Xo d'Esim -_2Xo viZ'Ezim -_3Xo tRiZ'Ezim -_4Xo kwad*aZ'Ezim -_5Xo kiNkwaZ'Ezim -_6Xo seksaZ'Ezim -_7Xo septwaZ'Ezim -_8Xo oktoZ'Ezim -_9Xo nonaZ'Ezim -_0Co seINt'Ezim -_1Co seINt'Ezim -_2Co duseINt'Ezim -_3Co tRiseINt'Ezim -_4Co kwad*iZeINt'Ezim -_5Co kiNZeINt'Ezim -_6Co seIseINt'Ezim -_7Co septSiZeINt'Ezim -_8Co oktSiZeINt'Ezim -_9Co noNZeINt'Ezim -_0M1o mil'Ezim -_1M1o mil'Ezim - - -// not roman numbers -vi vi - - -// ABBREVIATIONS -//************** -aapp $abbrev -abadv $abbrev -abc $abbrev -a.c 'as'e -adsl $abbrev -ae $abbrev -aids $abbrev -apedv $abbrev -avc $abbrev -bios b'i,OS -d.c d,es'e -cne $abbrev -cpu $abbrev -cpuc $abbrev -dpoc $abbrev -ecg $abbrev -edp $abbrev -?1 etc ,ets'Et:*& -?2 etc ,ets'Ete*& -e.u.a Eua -eua $abbrev -fbi $abbrev -hiv $abbrev -(http ://) ag,atete'pe_ -icc $abbrev -ieee $abbrev // Institute of Electrical and Electronics Engineers -iss $abbrev -jpeg Z,Ot&p'Eg -mpeg ,Emp'Eg -nba $abbrev -nvda $abbrev -oms $abbrev -omt $abbrev -osi $abbrev -?1 sa ,Esj'a -?1 sos ,Esj,O'Es -ue $abbrev -unts $abbrev -usb $abbrev - - -dr $dot -dra $dot -mr $dot -mrs $dot -prof pr'Of $dot -profº pR,ofes'or -profª pR,ofes'o*& -sr $dot -?1 sra ,Es;'Errj'a $dot -?2 sra $dot - -// articles -o $u+ $nounf -a $u+ $nounf -os $u+ $nounf -as $u+ $nounf -?1 a & $u+ $nounf - -um $u $nounf -uma $u $nounf -uns $u $nounf -umas $u $nounf - - -// pronouns -eu $u+ $verbf -tu $u+ -você vose $u2+ -ele 'ely $u+ -ela $u+ -nós $u+ -vós $u+ -vocês $u2+ -eles $u+ -elas $u+ - -me $u // reflexive -te $u -nos $u -la $u -lo $u -las $u -los $u -//se $u - -?2 este $u+ $nounf 'estSi // this -?2 estes $u+ $nounf 'estSis // these -?2 esta 'Est& $u+ $nounf -?2 neste $u+ $nounf n'estSi //in this -?2 nestes $u+ n'estSis //in these -?2 esse $u+ $nounf 'esi // that -essa 'Es& $u+ -desse d'esy $u+ -nesse n'esy $u+ -aquele &k'ely $u+ $nounf // that -aquela $u+ -daquele d&k'ely $u+ $nounf - - que $u // pronunciation is in pt_rules - -// possessive adjectives -meu $u+ $nounf -minha $u+ -meus $u+ -minhas $u+ -teu $u+ $nounf -tua $u+ -teus $u+ -tuas $u+ -seu $u+ $nounf -sua $u+ -seus $u+ -suas $u+ -?2 nosso $u+ // n'OsU -?2 nossa $u+ n'Os& -?2 nossos $u+ n'OsUs -?2 nossas $u+ n'Os&s -dele dely $u1+ -dela $u+ -deles $u+ -delas $u+ -nele nely $u1+ - -// prepositions -de $u // of,from -do $u $nounf -da $u $nounf -dos $u -das $u -dum $u -duma $u -duns $u -dumas $u - -em $u // in,on,at -no nu $u $nounf -na $u -?2 nos nus# $u -nas $u -num $u -numa $u -nuns $u -numas $u - -por $u // by,for,through -pelo $u -?2 pela $u p'el& -pelos $u -?2 pelas $u p'el&s - -ao $u -à ,a: -à $atend $atstart $accent -aos $u -às ,a:s - -para $u // for,to -pro $u $nounf -pra $u -pros $u -pras $u -prò $u -prà $u -pròs $u -pràs $u - -com $u // with -?2 sem // without -?2 até $u // until -?2 desde $u // from,since -?2 entre // between,among -?2 por $u // by,for,through - sobre $alt2 // on,above,about -?2 sob // under,below -?2 debaixo // under,below - -?2 durante - - -// conjunctions -?1 e i $u // and -?2 e i $u // and -se $u // if - - -?2 mas $u // but -?2 porém // however -?2 todavia // yet -?2 contudo // nevertheless - -?2 ou $u // or -?2 quer // whether - -?2 assim // thus -?2 portanto // therefore - -?2 porque // because -?2 pois // because -?2 como $u // as - -?2 embora // although -?2 apesar // despite - - -?2 caso // if -?2 (desde que) d'esdZiki/ // provided that -?2 (exceto se) es'Etusi/ // unless -?2 (salvo se) s'alvusi/ // unless - -?2 (para que) p,a*&ki/ // so that - - - -?2 quando // when -?2 onde $u // where -?2 apenas // as soon as -?2 mal // as soon as, hardly -?2 (logo que) l'Oguki/ // as soon as -?2 (antes que) '&~NtSiski/ // before -?2 (depois que) dep'OIski/ // after -?2 (sempre que) s'eNpriki/ // whenever -?2 enquanto // while - - -// negative - -// questions - - -// auxillary verbs (be, have, can, etc) - // ser, to be -ser $u -sou $u -é E $u -é $atend $atstart $accent -és Es $u -somos $u -sois $u -são $u - -era E*& $u1 // .. imperfect -éramos $u -éreis $u -eram E*&U~ $u1 - -fui $u // .. preterite -foste fostSy $u1 // & fostes -foi $u -fomos $u - - -fora $u // .. pluperfect -fômamos $u -fôreis $u -foram fo*&U~ $u1 - -serei $u // .. future -?2 será se*a $u2 -seremos $u -sereis $u -serão $u - -seria $u // .. conditional -seríamos $u -seríeis $u -seriam $u - - // estar - to be -estar $u -estou $u -está $u est'a -estamos $u -estais $u -estão $u - -estava $u -estávamos $u -astavam $u - -estive $u -?2 esteve estevy $u2 -estivemos $u -estiveram $u -estiver $u estSiv'Er - -estarei $u -estará $u -estaremos $u -estarão $u - - - // ter - to have -ter $u -tenho $u -tens $u -tem $u -temos $u -tendes $u -têm $u - -tinha $u -tínhamos $u -tínheis $u -tinham $u - -tive $u -tiveste $u -teve tevy $u1 -tivemos $u -tivestes $u -tiveram $u - -tivera $u -tivéramos $u -tivéreis $u -tiveram $u - -terei $u -terás $u -terá $u -teremos $u -tereis $u -terão $u - - // fazer - to do -fazer $u+ -faço $u+ -faz $u+ -fazemos $u+ -fazem $u+ - - - // poder - can -poder $u+ -posso $u+ -pode $u+ -podemos $u+ -podem $u+ - -podia $u+ -podíamos $u+ -podiam $u+ - -pude $u+ -pôde $u+ -pudemos $u+ -puderam $u+ - -poderei $u3+ -poderá $u3+ -poderemos $u+ -poderão $u+ - - - // ir - to go (used to make future tense) -vou $u+ -vai $u+ -vamos $u+ -vão $u+ - - // haver -há $u+ - - -// Letter names -_a a -_e E -_o O -a a $atend -e E $atend // assume letter-e at end of sentence -o O $atend - - -// some common adjectives and adverbs -alguns $u // some -algumas $u // some -não n,&U~ $strend // not - -// Words with two possible pronounciations -jogo Z'OgU $verb -gosto g'OstU $verb -começo kom'EsU $verb -almoço aUm'OsU $verb -retorno xet'OrnU $verb -acordo &k'OrdU $verb -governo gov'ernU $noun -?2 olho 'oljU $noun -?4 olho 'ol^U $noun -?2 colher kolj'Er $noun -?4 colher kol^'Er $noun - - -// MAIN WORD DICTIONARY -//********************* -// $alt changes stressed [e] or [o] phoneme to open [E] or [O] -// $alt2 changes stressed [E] or [O] phoneme to close [e] or [o] - -abacaxi abakaSy -abordo $alt -aborto $alt $verb -acerto $alt2 $noun -acertos $alt2 -acervo $alt2 -adepto $alt -adereço $alt2 -adore $alt -adorno $alt $verb -albatrozes $alt -alcateia $alt -alferes $alt -algozes $alt -alicerce $alt -amanheça $alt2 -amanheço $alt2 -amanhecesse $alt2 -amarelo $alt -ameba $alt -amores $alt2 -anoitecesse $alt2 -anoiteça $alt2 -anoiteço $alt2 -apego $alt2 $noun -apelo $alt $verb -aposto $alt $verb -apreço $alt2 -aperto $alt2 $noun -apoio $alt $verb -aprendeste $alt2 -aprovo $alt -arredores $alt -arremesso $alt2 $noun -arroz $alt2 -assembleia $alt -aterro $alt2 $noun -atmosfera $alt -atrozes $alt -austera $alt -austero $alt -autora $alt2 -axé aSE -bebeste $alt2 -beco $alt2 -belo $alt -besta $alt2 -bezerra $alt2 -bezerro $alt2 -bilhete $alt2 -boca $alt2 -bochecha $alt2 -bojo $alt2 -boleia $alt -bolero $alt -bolo $alt2 -bolo $alt $verb -borboleta $alt2 -bordo $alt -boto $alt2 $noun -bromelha $alt -cabeça $alt2 -cabresto $alt2 -cacete $alt2 -cachorra $alt2 -caderneta $alt2 -camiseta $alt2 -cantora $alt2 -caractere $alt -caramelo $alt -careta $alt2 -carreta $alt2 -casebre $alt -castelo $alt -cateto $alt2 -catorze $alt2 -cebola $alt2 -cefaleia $alt -cerca $alt $verb -cerco $alt $verb -cesta $alt2 -cesto $alt2 -chamego $alt2 -chefe $alt -chinelo $alt -choro $alt2 $noun -chupeta $alt2 -clamores $alt2 -coco $alt2 -cofre $alt -coice $alt2 -colabore $alt -colheste $alt2 -colmeia $alt -colore $alt -começo $alt2 $noun -comodo $alt2 -comera $alt2 -comeres $alt2 -comeste $alt2 -concerto $alt2 $noun -concordo $alt -conforto $alt $verb -conheceste $alt2 -conheço $alt2 -consolo $alt2 $noun -contivermos $alt -copa $alt -copo $alt -coreia $alt -corneta $alt2 -cornos $alt -corpos $alt -correste $alt2 -corto $alt -corveta $alt2 -corvos $alt -coto $alt2 -couber $alt -couberem $alt -couberdes $alt -couberes $alt -cratera $alt -crede $alt2 -cresce $alt -crescem $alt -der $alt -desapego $alt2 $noun -descabelo $alt -desce $alt -descem $alt -descordo $alt -descova $alt2 -desespero $alt2 $noun -desfecho $alt2 -desprezo $alt $verb -deva $alt2 -devo $alt2 -deveras $alt -dez $alt -diarreia $alt -discordo $alt -dissermos $alt -dobro $alt2 $noun -doce $alt2 -doutora $alt2 -droga $alt -duelo $alt -dueto $alt2 -elixir eliSir -elo $alt -emprego $alt2 $noun -encosto $alt $verb -endereço $alt2 -endereço $alt $verb -enforco $alt -engordo $alt -enumerem $alt -enredo $alt $verb -enterro $alt2 $noun -envelope $alt -envolto $alt2 -enxerto $alt2 $noun -epopeia $alt -eritreia $alt -erro $alt2 $noun -erros $alt2 -esboço $alt $verb -escopeta $alt2 -escroto $alt2 -esforço $alt $verb -esforços $alt -esgoto $alt2 $noun -esperma $alt -espeto $alt2 $noun -espiroqueta $alt2 -espoleta $alt2 -esposa $alt2 -esqueceste $alt2 -esqueleto $alt2 -estiverdes $alt -estiveres $alt -estivermos $alt -estrela $alt2 -estremeceste $alt2 -estrofe $alt -estorno $alt $verb -estorvo $alt $verb -etiqueta $alt2 -europa $alt -exagero $alt $verb -expeça $alt2 -expeço $alt2 -explore $alt -faceta $alt2 -farelo $alt -farofa $alt -febre $alt -feitora $alt2 -fera $alt -fere $alt -ferem $alt -ferozes $alt -fezes $alt -?1 fixe fiSy -fizermos $alt -folga $alt -fogos $alt -foguete $alt2 -foice $alt2 -forca $alt2 -forças $alt2 -fores $alt2 -forro $alt $verb -fosse $alt2 -fossem $alt2 -frevo $alt2 -galera $alt -gameta $alt2 -geleia $alt -gelo $alt $verb -germe $alt -gesso $alt2 -golpe $alt -gonorreia $alt -gorda $alt2 -gota $alt2 -gozo $alt $verb -graveto $alt2 -grego $alt2 -grelha $alt -grega $alt2 -groselha $alt -grosso $alt2 -grozo $alt $verb -hoje $alt2 -houvermos $alt -ideia $alt -insonoro $alt -joga $alt -jogam $alt -jogos $alt -jogue $alt -joguem $alt -joguete $alt2 -lambreta $alt2 -lebre $alt -lerda $alt -lerdo $alt -líderes $alt2 -lopes $alt -maleta $alt2 -mantiverdes $alt -mantiveres $alt -mantivermos $alt -marmelo $alt -marreta $alt2 -martelo $alt -merda $alt -megera $alt -melo $alt -mentora $alt2 -metro $alt -mexa m'eS& -mexi meS'i -mexo m'eSU -miolo $alt2 -moeda $alt -modo $alt -modos $alt -molho $alt2 $noun -monera $alt -morcego $alt2 -morda $alt2 -moreia $alt -mortos $alt -motora $alt2 -?2 mulher mulj'Er -?4 mulher mul^'Er -mui mwi -muito mw'iNtU // -s is included as a suffix -muita mw'iNt& -mulheres $alt -mureta $alt2 -mutreta $alt2 -namoro $alt2 $noun -naquele $alt2 -negra $alt2 -negro $alt2 -novos $alt -obstetra $alt -obsoleta $alt2 -obsoleto $alt2 -pbvivera $alt -obtivermos $alt -odisseia $alt -onu $1 -opereta $alt2 -ordens $alt -osso $alt2 -ostra $alt2 -ovos $alt -pachorra $alt2 -padeceste $alt2 -paexa paeSa -palacete $alt2 -palheta $alt2 -pangeia $alt -pantera $alt -paralelo $alt -parede $alt2 -pastora $alt2 -pedra $alt -pelego $alt2 -pelo $alt $verb -perde $alt -perdem $alt -perede $alt2 -pesa $alt -pesam $alt -pesque $alt -pesquem $alt -peso $alt -peso $alt2 $noun -piloto $alt2 -pintora $alt2 -pirueta $alt2 -plateia $alt -plebeia $alt -polca $alt -porcos $alt -porrete $alt2 -porra $alt2 -portos $alt -pose $alt2 -povos $alt -poxa p'oS& -preta $alt2 -preto $alt2 -primavera $alt -profere $alt -proferem $alt -provo $alt -puder $alt -punheta $alt -puserdes $alt -quarteto $alt2 -quinteto $alt2 -quisermos $alt -recomeço $alt2 $noun -recordo $alt -recorto $alt -rede $alt2 -redor $alt -reembolso $alt $verb -reforços $alt -reforço $alt $verb -refresco $alt $verb -reitora $alt2 -relevo $alt2 $noun -remorso $alt -reprovo $alt -resolve $alt -resolvem $alt -rixa x'iS& -rocha $alt -rock $alt -rogas $alt -rolo $alt2 $noun -rumores $alt2 -saleta $alt2 -sarjeta $alt -severa $alt -severo $alt -seborreia $alt -seco $alt2 $noun -secos $alt2 -selo $alt $verb -selvagem seUv'aZeIN -sexteto $alt2 -?1 senhora $alt2 -senhores $alt2 -sincera $alt -sincero $alt -sinopse $alt -sobe $alt -sobem $alt -soco $alt2 -soco $alt $verb -sofrem $alt -sofre $alt -sofreste $alt2 -sogra $alt -sopre $alt -soprem $alt -sopro $alt $verb -soro $alt2 -sorvete $alt2 -sossego $alt2 $noun -souberdes $alt -soubermos $alt -suborno $alt $verb -sufoco $alt2 $noun -sufocos $alt2 -sugere $alt -sugerem $alt -suporto $alt -suor swOr -tapete $alt2 -tempero $alt2 $noun -teta $alt2 -tetra $alt -tiver $alt -tivera $alt -tiveres $alt -tivermos $alt -tocha $alt -toga $alt -tola $alt2 -tolo $alt2 -topo $alt $verb -torno $alt $verb -torres $alt2 -tortos $alt -traqueia $alt -travesso $alt2 -tremores $alt2 -trevo $alt2 -troco $alt2 $noun -tropa $alt -tropeço $alt2 $noun -trombeta $alt2 -valeta $alt2 -vanessa $alt2 -velozes $alt -verbo $alt -verme $alt -vierem $alt -violeta $alt2 -voga $alt -vozes $alt -xarope $alt -zelo $alt $verb -zero $alt -zorra $alt2 - - - - -// foreign words -?1 alt 'alt -?2 agosto &g'ostU -?1 back b'Ek -?2 backup bEk'&p -?2 backups bEk'&ps -?1 blind bl'aind -?1 braille b:r'aily -?2 Braille bR'aili -?1 cancel k'&ns'El -?1 caps k'aps -?1 com kom -?1 ctrl k'oNt:r,Ol -?1 dat d'at -?1 doc d'Ok -?1 delete d'il'it -?1 design d,iz'ain -?1 dj d,i:dZ'eI -?1 down d'a,wn -?1 download d'a,wnl'oud -?2 download daUNl'owd -?3 download dau~Nl'owd -?1 end 'end -?1 escape Sk'eIpy -?2 esc 'Esk -?3 esc 'EskI -?1 explorer ,ekspl'O:*&r- -?2 Explorer ekspl'O*er -?1 eyes 'aiz -?1 frame fr'eImy -?2 frame fR'eImi -?1 gmail g,em'eIl -?2 Gmail Zem'eIl -?1 google g'u:g&l -?2 google g'ugol -?1 hardware 'ard,w'Er- -?2 hardware h'ardwe@- -?1 home 'omy -?2 home h'owmi -?1 hotmail h'Otm'eIl -?2 hotmail hotm'eIl -?1 install ,inst'al -?2 internet iNtern'Et -?2 Intranet iNtRan'Et -?2 inveja iNv'EZ& -?1 kernel k'Ern,El -?2 kernel k'Ern@l -?1 line l'ain - layout l'eI,aUt -?2 logo l'OgU -?1 lock l'Ok - mail m'eIl - mails m'eIls -?1 maior m,&j'Or- -?2 maior maI'Or -?2 maiores maI'O*is -?1 menor myn'Or- -?2 menor men'Or -?2 menores men'O*is -?2 melhor melj'Or -?2 melhores melj'O*is -?4 melhor mel^'Or -?4 melhores mel^'O*is -?2 mouse m'aUzi -?1 menu menu -?1 next n'Ekst - ok Ok'eI -?2 offline Ofl'aIN -?2 online oNlaIN - org Org -?1 ovo 'ovu -?1 pause p'au:z - page p'eIdZ -?2 pior pi'Or -?2 piores pi'O*is -preço $alt2 -python p'aIT&~N -queda $alt -?1 readme r'i:dmi: -?1 sapi s,ap'i -?1 scanner sk'En&r -?1 shift S'ift -?1 scroll sk:r'ol -?1 site s'aIt -?2 site s'aItSi -?1 software s'Oft,w'Er- -símbolo s'imbolU -?4 símbolo s'iNbolU -?2 software s'Oftwe@- -?1 space sp'eIsy -?1 sporting sp'Ort,ing -?1 tab t'ab -?1 telemóvel t,El,Em'OvEl -?1 telemóveis t,El,Em'OveIs# -?1 up &p -?1 upload &pl'oud -?2 web w'Eb -?2 verbete verb'etSi -?2 verbetes verb'etSis -?1 yahoo 'i,ah'u -?2 yahoo iah'u -?1 yes j'Es - - -// common person names -alan 'al@n -louis _^_FR - - -// foreign product names -?1 access 'aks,Es -?1 adobe &d'Oby - debian d'Ebj&~N -?1 excel ,Eks'El -?1 express ,Ekspr'Es - espeak isp'i:k -?1 espeakedit isp'i:kEd,it -?1 fedora _^_EN -?1 firefox f'ai&rfOks -?2 firefox f'ai@fOks -?1 front fr'ont -?1 jaws dZ'au:z -?1 linux l,in'uks -?2 linux l'inUks -?1 live l'aiv -?1 maker m'eIk&r- -?1 media m'Ed,i& -?1 messenger m'Es&ndZ&r- -?1 microsoft m,ik:r'os,Oft -?2 microsoft m'aIkRows'Oft -?1 movie m'uvi -?1 nero n'Eru -?1 office 'Of,is - openoffice 'opeIN|'Ofis -?1 outlook 'autl'uk -?2 Outlook ,aUtl'uk -?1 paint p'aint -?1 player pl'eI&r- -playstation _^_EN -?1 point p'oint -?1 power p'aU&r- -?1 product p:r'&d&kt -?1 Publisher p'&bl,iS&r- -?1 reader r'id,&r- -?1 setup s'Et'&p -?1 scout sk'aut // Nero scout -?1 skype sk'aip -?2 Skype sk'aIp - Slackware sl'akwe@- -?1 smart sm'art // nero StartSmart - speak spi:k - suse z'u:ts@ -?1 start st'art // nero StartSmart -?1 time t'aImy // nero show time - ubuntu ub'untu -?1 unix ,u:n'iks -?2 unix j'uniks - wagner v'agner -?3 wagner v'agIner -?1 windows w'iNd'ou:z -?2 windows w'iNdows -?1 window w'iNd'ou -?2 window w'iNdow - - -// historical/famous person names -babbage b'abidZ -bernhard bern'ard -darwin d'Arwin -dijkstra d'ijkstrA: -einstein _!'aInSt,aIn -feynman f'ainm@n -freud fr'OId -friedrich fr'i:driS -gauss g'aUs -geisel g'aIzEU -gottfried g'Otfri:t -hawking h'o:king -heisenberg h'aIzEnberg -hitler h'itler -isaac iz'&k -lavoisier lavwazj'e -leibniz l'aIbni:ts -montesquieu m,oNteskj'e -neumann n'OIman -newton n'i;utoN -oppenheimer _!'Op@nh,aImar -richard x'iS&rd -riemann r'i:man -rijndael x'ain;d'al -rousseau Rus'o -schrödinger Sr'edinger -stephen st'i:v@n -steve st'i:v -turing t'u*iNg -voltaire vOlt'Er -von f%On - - -// foreign common names/surnames -?1 alison &l'is&N -?1 cleverson kl'Evyrs&N -?2 cleverson kl'EversoN -?1 elton 'Elt&N -?1 halison &l'is&N -klein kl'aIn // Very common on southern Brazil. -?1 kleverson kl'Evers&N -krueger kR'iZer -krüger kR'iZer -kühl k'il -?1 nelson n'Els&N -mueler m'iler -mueller m'iler -müler m'iler -müller m'iler -ronchi r'OnCi: -vogel f'o:g@l -volkmann f'Olkman - - - - - - - - - - + +// This file in UTF8 encoded + +// Options +// ?1 European Portuguese +// ?2 Brazilian Portuguese +// ?3 Epenthetic [I] between consonants +// ?4 Brazil mbrola voice + +// $alt change [e] or [o] in the stressed syllable to [E] or [O] +// $alt2 change [E] or [O] in the stressed syllable to [e] or [o] +// Any [E] or [O] phonemes in unstressed words must be listed explicitly + + +// Note for "pt-pt" [R] is the same sound as [r] +// for "pt" [y] is the same sound as [i] + + +// Letters +// If a letter has a "word" pronunciation which is different from its +// "letter" name, then include the letter name here, with the letter +// prefixed by a _ character. + +// accent names +_lig ligad'u*& +_acu &g'udU +_ac2 &g'udUd'uplU +_brv bR'Evi +_ced sedZ'ilj& +?1 _ced syd'il^& +_cir sirku~Nfl'EksU +_dia tR'em& +_dot p'oNtU +_grv gR'avi +_hac ka*'oN +_mcn makR'oN +_ogo ogon'ek +_rng &~n'EU +?1 _rng &~n'El +_stk b'ax& +_tld tS'iU +?1 _tld til + + +// character names + +á $accent +_à $accent // à can be a word +â $accent +ã $accent +ç $accent +_é $accent // é can be a word +ê $accent +í $accent +ó $accent +ô $accent +õ $accent +ú $accent +ü $accent +ß _^_DE + +v ve // not Roman numbers +x Sis# + +_cap maI'uskulU +_?A l'etR&_ +_?? s'imbolU_ +_#32 esp'asU +?1 _#32 Sp'asU +_#9 tab + +* &ste*'iskU $max3 += __igw'&l_ $max3 +. p'oNtU $max3 ++ maIs# $max3 +% pors'eINtU $max3 +& _'e_ +@ &x'ob& +¤ 'eU*U +€ 'eU*U +§ p&*'agRafU + + +_! ,eskl&mas'&U~ +_" 'asp&s# + +?1 _# k,ardin'al +?2 _# k,ardZin'aU +_$ s,ifR'&U~ +_& 'e +?1 _' ap'Ostr,ofy +?2 _' &p'OstRofU +_( ,abRipa*'eINtezy +_) f,ES&pa*'eINtezy +_* &ste*'iskU +_− m'enUs + +_, v'irgul& +_- 'ifeIN +_/ b'aQ& +_: d,oIsp'oNtus +_; p,oNtu_iv'irgul& +_< men'Or +?1 _= igw'al +?2 _= igw'aU +_> maI'Or +_? ,iNtex,ogas'&U~ +_[ ,abRikowS'etSi +_\ b,ax&,iNvertS'id& +_] f,ES&kowS'etSi +_^ s,irku~Nfl'Eksu +__ s,ublin^'adu +_` gR'avi +_{ ,abRiS'avi +?1 _| b,ax&v,ertSik'al +?2 _| b,ax&v,ertSik'aU +_} f,ES&S'avi +?1 _~ t'il +?2 _~ tS'iU +_¡ ,eskl&mas,&U~,iNvertS'id& +_¿ ,iNtex,ogas,&U~,iNvertS'id& + +_" 'abRi;'asp&||d'upl&s# +_º Oz'in^U +_ª az'in^U +° gR'aU + + +// numeric +//******** + +?1 _0 z'E*u +?2 _0 z'E*U +?1 _1 'um +?2 _1 'u~N + _2 d'oIs# + _3 tR'es# +?1 _4 kw'atru +?2 _4 kw'atRu + _5 s'iNku + _6 s'eIs# +?1 _7 s'Ety +?2 _7 s'EtSy + _8 'oItu + _9 n'Ovy + _10 d'Es# + +_11 'oNzy +_12 d'ozy +?1_13 tr'ezy +?2_13 tR'ezi +?1_14 k&t'orzy +?2_14 kat'orzy +_15 k'iNzy +?1_16 dyz&s'eis# +?2_16 d,ezes'eIs# +?1_17 dyz&s'Ety +?2_17 d,ezes'EtSy +?1_18 dyz'Oitu +?2_18 dez'oItu +?1_19 dyz&n'Ovy +?2_19 dezen'Ovy +?1_2X v'iNty +?2_2X v'iNtSy +_3X tR'iNt& + +?1_4X kw&*'eNt& +?2_4X kwa*'eINt& +_5X siNkw'eINt& +?1_6X sys'eINt& +?2_6X ses'eINt& +?1_7X syt'eINt& +?2_7X set'eINt& +_8X oIt'eINt& +?1 _9X nuv'eINt& +?2 _9X nov'eINt& +_1C0 s'eIN +?1_0C s'eINtus# +?2_0C s'eINtUs# +_1C s'eINtu +?1_2C duz'eINtus# +?2_2C duz'eINtUz +?1_3C tryz'eNtus# +?2_3C tRez'eNtUz +?1_5C kin^'eINtus# +?2_5C kin^'eINtUz +?1_0M1 m'il_ +?2_0M1 m'iU_ +?1_1M1 m'il_ +?2_1M1 m'iU_ + +?1_0M2 milj'o~js# +?2_0M2 milj'o~jz +_1M2 'u~milj'&U~ +?1_0M3 bilj'o~js# +?2_0M3 bilj'o~jz +_1M3 'u~mbilj'&U~ +?1_0M4 trilj'o~js# +?2_0M4 trilj'o~jz +_1M4 'u~ntrilj'&U~ +_0and i +_dpt _v'irgul& +// _0Z2 seNt'Ezim& // 100ths +// _0Z3 mil'Ezim& // 1000ths + +// ordinal numbers +_#º U +_#ª & +_ord o + +_1o pRim'eI* +_2o seg'u~Nd +_3o te*@-s'eI* +_4o kw'a*@-t +_5o k'iNt +_6o s'est +_7o s'EtSim +_8o oIt'av +_9o n'on +_1Xo d'Esim +_2Xo viZ'Ezim +_3Xo tRiZ'Ezim +_4Xo kwad*aZ'Ezim +_5Xo kiNkwaZ'Ezim +_6Xo seksaZ'Ezim +_7Xo septwaZ'Ezim +_8Xo oktoZ'Ezim +_9Xo nonaZ'Ezim +_0Co seINt'Ezim +_1Co seINt'Ezim +_2Co duseINt'Ezim +_3Co tRiseINt'Ezim +_4Co kwad*iZeINt'Ezim +_5Co kiNZeINt'Ezim +_6Co seIseINt'Ezim +_7Co septSiZeINt'Ezim +_8Co oktSiZeINt'Ezim +_9Co noNZeINt'Ezim +_0M1o mil'Ezim +_1M1o mil'Ezim + + +// not roman numbers +vi vi + + +// ABBREVIATIONS +//************** +aapp $abbrev +abadv $abbrev +abc $abbrev +a.c 'as'e +adsl $abbrev +ae $abbrev +aids $abbrev +apedv $abbrev +avc $abbrev +bios b'i,OS +d.c d,es'e +cne $abbrev +cpu $abbrev +cpuc $abbrev +dpoc $abbrev +ecg $abbrev +edp $abbrev +?1 etc ,ets'Et:*& +?2 etc ,ets'Ete*& +e.u.a Eua +eua $abbrev +fbi $abbrev +hiv $abbrev +(http ://) ag,atete'pe_ +icc $abbrev +ieee $abbrev // Institute of Electrical and Electronics Engineers +iss $abbrev +jpeg Z,Ot&p'Eg +mpeg ,Emp'Eg +nba $abbrev +nvda $abbrev +oms $abbrev +omt $abbrev +osi $abbrev +?1 sa ,Esj'a +?1 sos ,Esj,O'Es +ue $abbrev +unts $abbrev +usb $abbrev + + +dr $dot +dra $dot +mr $dot +mrs $dot +prof pr'Of $dot +profº pR,ofes'or +profª pR,ofes'o*& +sr $dot +?1 sra ,Es;'Errj'a $dot +?2 sra $dot + +// articles +o $u+ $nounf +a $u+ $nounf +os $u+ $nounf +as $u+ $nounf +?1 a & $u+ $nounf + +um $u $nounf +uma $u $nounf +uns $u $nounf +umas $u $nounf + + +// pronouns +eu $u+ $verbf +tu $u+ +você vose $u2+ +ele 'ely $u+ +ela $u+ +nós $u+ +vós $u+ +vocês $u2+ +eles $u+ +elas $u+ + +me $u // reflexive +te $u +nos $u $nounf +la $u +lo $u +las $u +los $u +//se $u + +?2 este $u+ $nounf 'estSi // this +?2 estes $u+ $nounf 'estSis // these +?2 esta 'Est& $u+ $nounf +?2 nesta $u+ $nounf +?2 neste $u+ $nounf n'estSi //in this +?2 esse $u+ $nounf 'esi // that +essa 'Es& $u+ +desse $u+ $nounf +desta $nounf +nesse n'esy $u+ $nounf +aquele &k'ely $u+ $nounf // that +aquela $u+ $nounf +daquele d&k'ely $u+ $nounf +daquela $u+ $nounf + + que $u // pronunciation is in pt_rules + +// possessive adjectives +meu $u+ $nounf // meus +minha $u+ $nounf // minhas +teu $u+ $nounf +tua $u+ $nounf +seu $u+ $nounf +sua $u+ $nounf +?2 nosso $u+ $nounf // n'OsU +?2 nossa $u+ $nounf n'Os& +?2 nossos $u+ $nounf n'OsUs +?2 nossas $u+ $nounf n'Os&s +dele dely $u1+ +dela $u+ +deles $u+ +delas $u+ +nele nely $u1+ + +// prepositions +de $u $nounf // of,from +do $u $nounf +da $u $nounf +dos $u $nounf +das $u $nounf +dum $u +duma $u +duns $u +dumas $u + +em $u // in,on,at +no nu $u $nounf +na $u $nounf +num $u +numa $u +nuns $u +numas $u + +por $u $nounf // by,for,through +pelo $u $nounf +?2 pela $u $nounf p'el& + +ao $u +à ,a: +à $atend $atstart $accent +aos $u +às ,a:s + +para $u // for,to +pro $u $nounf +pra $u +pros $u +pras $u +prò $u +prà $u +pròs $u +pràs $u + +com $u // with +?2 sem // without +?2 até $u // until +?2 desde $u // from,since +?2 entre // between,among + sobre $alt2 // on,above,about +?2 sob // under,below +?2 debaixo // under,below + +?2 durante + + +// conjunctions +?1 e i $u // and +?2 e i $u // and +se $u // if + + +?2 mas $u // but +?2 porém // however +?2 todavia // yet +?2 contudo // nevertheless + +?2 ou $u // or +?2 quer // whether + +?2 assim // thus +?2 portanto // therefore + +?2 porque // because +?2 pois // because +?2 como $u // as + +?2 embora // although +?2 apesar // despite + + +?2 caso // if +?2 (desde que) d'esdZiki/ // provided that +?2 (exceto se) es'Etusi/ // unless +?2 (salvo se) s'alvusi/ // unless + +?2 (para que) p,a*&ki/ // so that + + + +?2 quando // when +?2 onde $u // where +?2 apenas // as soon as +?2 mal // as soon as, hardly +?2 (logo que) l'Oguki/ // as soon as +?2 (antes que) '&~NtSiski/ // before +?2 (depois que) dep'OIski/ // after +?2 (sempre que) s'eNpriki/ // whenever +?2 enquanto // while + + +// negative + +// questions + + +// auxillary verbs (be, have, can, etc) + // ser, to be +ser $u +sou $u +é E $u +é $atend $atstart $accent +és Es $u +somos $u +sois $u +são $u + +era E*& $u1 // .. imperfect +éramos $u +éreis $u +eram E*&U~ $u1 + +fui $u // .. preterite +foste fostSy $u1 // & fostes +foi $u +fomos $u + + +fora $u // .. pluperfect +fômamos $u +fôreis $u +foram fo*&U~ $u1 + +serei $u // .. future +?2 será se*a $u2 +seremos $u +sereis $u +serão $u + +seria $u // .. conditional +seríamos $u +seríeis $u +seriam $u + + // estar - to be +estar $u +estou $u +está $u est'a +estamos $u +estais $u +estão $u + +estava $u +estávamos $u +astavam $u + +estive $u +?2 esteve estevy $u2 +estivemos $u +estiveram $u +estiver $u estSiv'Er + +estarei $u +estará $u +estaremos $u +estarão $u + + + // ter - to have +ter $u +tenho $u +tens $u +tem $u +temos $u +tendes $u +têm $u + +tinha $u +tínhamos $u +tínheis $u +tinham $u + +tive $u +tiveste $u +teve tevy $u1 +tivemos $u +tivestes $u +tiveram $u + +tivera $u +tivéramos $u +tivéreis $u +tiveram $u + +terei $u +terás $u +terá $u +teremos $u +tereis $u +terão $u + + // fazer - to do +fazer $u+ +faço $u+ +faz $u+ +fazemos $u+ +fazem $u+ + + + // poder - can +poder $u+ +posso $u+ +pode $u+ +podemos $u+ +podem $u+ + +podia $u+ +podíamos $u+ +podiam $u+ + +pude $u+ +pôde $u+ +pudemos $u+ +puderam $u+ + +poderei $u3+ +poderá $u3+ +poderemos $u+ +poderão $u+ + + + // ir - to go (used to make future tense) +vou $u+ +vai $u+ +vamos $u+ +vão $u+ + + // haver +há $u+ + + +// Letter names +_a a +_e E +_o O +a a $atend +e E $atend // assume letter-e at end of sentence +o O $atend + + +// some common adjectives and adverbs +alguns $u // some +algumas $u // some +não n,&U~ $strend // not + + +// MAIN WORD DICTIONARY +//********************* +// $alt changes stressed [e] or [o] phoneme to open [E] or [O] +// $alt2 changes stressed [E] or [O] phoneme to close [e] or [o] + +abacaxi abakaSy +abordo $alt +aborto $alt $verb +acerto $alt2 $noun +acordo $alt $verb +acertos $alt2 +acervo $alt2 +adepto $alt +adereço $alt2 +adore $alt +adorno $alt $verb +albatrozes $alt +alcateia $alt +alferes $alt +algozes $alt +alicerce $alt +almoço $alt $verb +amarelo $alt +ameba $alt +amores $alt2 +apego $alt2 $noun +apelo $alt $verb +aposto $alt $verb +apreço $alt2 +aperto $alt2 $noun +apoio $alt $verb +aprovo $alt +arredores $alt +arremesso $alt2 $noun +arroz $alt2 +assembleia $alt +ateia $alt +aterro $alt2 $noun +atmosfera $alt +atrozes $alt +austera $alt +austero $alt +autora $alt2 +axé aSE +baqueta $alt2 +beco $alt2 +belo $alt +besta $alt2 +bilhete $alt2 +boca $alt2 +bochecha $alt2 +bojo $alt2 +boleia $alt +bolero $alt +bolo $alt2 +bolo $alt $verb +borboleta $alt2 +bordo $alt +boto $alt2 $noun +bromelha $alt +cabeça $alt2 +cabresto $alt2 +cacete $alt2 +cachorra $alt2 +caderneta $alt2 +camiseta $alt2 +cantora $alt2 +capacete $alt2 +caractere $alt +caramelo $alt +careta $alt2 +carreta $alt2 +carroça $alt +casebre $alt +castelo $alt +cateto $alt2 +catorze $alt2 +cebola $alt2 +cefaleia $alt +cerco $alt $verb +cesta $alt2 +cesto $alt2 +chamego $alt2 +chefe $alt +checam $alt +cheque $alt +chinelo $alt +choro $alt2 $noun +chovesse $alt2 +chupeta $alt2 +clamores $alt2 +coco $alt2 +cofre $alt +cogumelo $alt +coice $alt2 +colabore $alt +colete $alt2 +colchete $alt2 +colher $alt $verb +colheres $alt $noun +colmeia $alt +colore $alt +começo $alt2 $noun +comodo $alt2 +concerto $alt2 $noun +concordo $alt +conforto $alt $verb +consolo $alt2 $noun +contivermos $alt +controle $alt2 $noun +controlo $alt2 $noun +copa $alt +copo $alt +coreia $alt +corneta $alt2 +cornos $alt +corpos $alt +corto $alt +corveta $alt2 +corvos $alt +coto $alt2 +couberdes $alt +coubermos $alt +cratera $alt +crede $alt2 +cresce $alt +crescem $alt +der $alt +derdes $alt +desapego $alt2 $noun +descabelo $alt +desce $alt +descem $alt +descordo $alt +desespero $alt2 $noun +desfecho $alt2 +desprezo $alt $verb +deva $alt2 +devo $alt2 +deveras $alt +dez $alt +diarreia $alt +discordo $alt +dissermos $alt +dobro $alt2 $noun +doce $alt2 +doutora $alt2 +droga $alt +duelo $alt +dueto $alt2 +elixir eliSir +elo $alt +emprego $alt2 $noun +encosto $alt $verb +endereço $alt2 +endereço $alt $verb +enforco $alt +engordo $alt +enumerem $alt +enredo $alt $verb +enterro $alt2 $noun +envelope $alt +envolto $alt2 +enxerto $alt2 $noun +epopeia $alt +erga $alt2 +ergam $alt2 +ergo $alt2 +eritreia $alt +erro $alt2 $noun +erros $alt2 +esboço $alt $verb +escopeta $alt2 +escova $alt2 $noun +escroto $alt2 +esforço $alt $verb +esforços $alt +esgoto $alt2 $noun +esgotos $alt2 +esperma $alt +espeto $alt2 $noun +espiroqueta $alt2 +espoleta $alt2 +esposa $alt2 +esqueleto $alt2 +estiverdes $alt +estivermos $alt +estrela $alt2 +estrofe $alt +estorno $alt $verb +estorvo $alt $verb +etiqueta $alt2 +europa $alt +exagero $alt $verb +expeça $alt2 +expeço $alt2 +explore $alt +faceta $alt2 +farelo $alt +farofa $alt +febre $alt +feitora $alt2 +fera $alt +ferozes $alt +fezes $alt +?1 fixe fiSy +fizerdes $alt +fizermos $alt +foda $alt2 $verb +folga $alt +fogos $alt +foguete $alt2 +foice $alt2 +forca $alt2 +forças $alt2 +fordes $alt2 +fores $alt2 +forro $alt $verb +fosse $alt2 +frevo $alt2 +galera $alt +galileia $alt +gameta $alt2 +geleia $alt +gelo $alt $verb +germe $alt +gesso $alt2 +golpe $alt +gonorreia $alt +gorda $alt2 +gosto $alt $verb +gota $alt2 +governo $alt2 $noun +gozo $alt $verb +graveto $alt2 +grego $alt2 +grelha $alt +grega $alt2 +groselha $alt +grosso $alt2 +grozo $alt $verb +hemorroida $alt +hoje $alt2 +horrores $alt2 +houverdes $alt +houvermos $alt +ideia $alt +insonoro $alt +interesse $alt2 $noun +joga $alt +jogam$alt +jogo $alt $verb +jogos $alt +jogue $alt +joguem $alt +joguete $alt2 +lambreta $alt2 +lebre $alt +lerda $alt +lerdo $alt +líderes $alt2 +lopes $alt +maleta $alt2 +mantiverdes $alt +mantiveres $alt +mantivermos $alt +marcelo $alt +marmelo $alt +marreta $alt2 +martelo $alt +merda $alt +megera $alt +melo $alt +mentora $alt2 +meta $alt $noun +meteoro $alt +metro $alt +mexa m'eS& +mexi meS'i +mexo m'eSU +minueto $alt2 +miolo $alt2 +miolos $alt +moeda $alt +modo $alt +modos $alt +molho $alt2 $noun +monera $alt +morcego $alt2 +morda $alt2 +moreia $alt +mortos $alt +motora $alt2 +?2 mulher mulj'Er +?4 mulher mul^'Er +mui mwi +muito mw'iNtU // -s is included as a suffix +muita mw'iNt& +mulheres $alt +mureta $alt2 +mutreta $alt2 +namoro $alt2 $noun +naquela $nounf +naquele $alt2 $nounf +negra $alt2 +negro $alt2 +novos $alt +obstetra $alt +obsoleta $alt2 +obsoleto $alt2 +obtivera $alt +obtivermos $alt +odisseia $alt +onu $1 +olho $alt2 $noun +osso $alt2 +ossos $alt +opereta $alt2 +ordens $alt +ostra $alt2 +ovos $alt +pachorra $alt2 +paexa paeSa +palacete $alt2 +palheta $alt2 +pangeia $alt +pantera $alt +paralelo $alt +parede $alt2 +pastora $alt2 +pedra $alt +pelego $alt2 +pelo $alt $verb +perde $alt +perdem $alt +pesa $alt +pesam $alt +pesque $alt +pesquem $alt +peso $alt $verb +piloto $alt2 $noun +pintora $alt2 +pirueta $alt2 +plateia $alt +plebeia $alt +polca $alt +porcos $alt +porrete $alt2 +porra $alt2 +portos $alt +pose $alt2 +povos $alt +poxa p'oS& +preta $alt2 +preto $alt2 +primavera $alt +provo $alt +puder $alt +puderdes $alt +pudermos $alt +puserdes $alt +quarteto $alt2 +quinteto $alt2 +quiserdes $alt +quisermos $alt +recomeço $alt2 $noun +recordo $alt +recorto $alt +rede $alt2 +redor $alt +reembolso $alt $verb +reforços $alt +reforço $alt $verb +refresco $alt $verb +reitora $alt2 +relevo $alt2 $noun +remorso $alt +reprovo $alt +resolve $alt +resolvem $alt +retorno $alt $verb +rixa x'iS& +rocha $alt +rock $alt +rogas $alt +rola $alt2 $noun +rolo $alt2 $noun +rosna $alt +rosnam $alt +rosne $alt +rosnem $alt +rosno $alt +rumores $alt2 +saleta $alt2 +sarjeta $alt +severa $alt +severo $alt +seborreia $alt +seca $alt2 $noun +secas $alt2 +seco $alt2 +seco $alt $verb +selo $alt $verb +selvagem seUv'aZeIN +sexteto $alt2 +?1 senhora $alt2 +senhores $alt2 +sincera $alt +sincero $alt +sinopse $alt +sobe $alt +sobem $alt +soco $alt2 +soco $alt $verb +sofrem $alt +sofre $alt +sofreste $alt2 +sogra $alt +sopre $alt +soprem $alt +sopro $alt $verb +soro $alt2 +sorvete $alt2 +sossego $alt2 $noun +souberdes $alt +soubermos $alt +suborno $alt $verb +sufoco $alt2 $noun +sufocos $alt2 +sugere $alt +sugerem $alt +suporto $alt +suor swOr +tapete $alt2 +tempero $alt2 $noun +teta $alt2 +tetra $alt +tiverdes $alt +tivermos $alt +tocha $alt +toga $alt +tola $alt2 +tolo $alt2 +tolhe $alt +tolhem $alt +topo $alt $verb +torno $alt $verb +torre $alt2 $noun +torres $alt2 +tortos $alt +traqueia $alt +travesso $alt2 +tremores $alt2 +trevo $alt2 +troco $alt2 $noun +tropa $alt +tropeço $alt2 $noun +trombeta $alt2 +tumores $alt2 +valeta $alt2 +vanessa $alt2 +velozes $alt +verme $alt +vierem $alt +violeta $alt2 +voga $alt +vozes $alt +xarope $alt +xeque $alt +zelo $alt $verb +zero $alt +zorra $alt2 + + + + +// foreign words +?1 alt 'alt +?2 agosto &g'ostU +?1 back b'Ek +?2 backup bEk'&p +?2 backups bEk'&ps +?1 blind bl'aind +?1 braille b:r'aily +?2 Braille bR'aili +?1 cancel k'&ns'El +?1 caps k'aps +?1 com kom +?1 ctrl k'oNt:r,Ol +?1 dat d'at +?1 doc d'Ok +?1 delete d'il'it +?1 design d,iz'ain +?1 dj d,i:dZ'eI +?1 down d'a,wn +?1 download d'a,wnl'oud +?2 download daUNl'owd +?3 download dau~Nl'owd +?1 end 'end +?1 escape Sk'eIpy +?2 esc 'Esk +?3 esc 'EskI +?1 explorer ,ekspl'O:*&r- +?2 Explorer ekspl'O*er +?1 eyes 'aiz +?1 frame fr'eImy +?2 frame fR'eImi +?1 gmail g,em'eIl +?2 Gmail Zem'eIl +?1 google g'u:g&l +?2 google g'ugol +?1 hardware 'ard,w'Er- +?2 hardware h'ardwe@- +?1 home 'omy +?2 home h'owmi +?1 hotmail h'Otm'eIl +?2 hotmail hotm'eIl +?1 install ,inst'al +?2 internet iNtern'Et +?2 Intranet iNtRan'Et +?2 inveja iNv'EZ& +?1 kernel k'Ern,El +?2 kernel k'Ern@l +?1 line l'ain + layout l'eI,aUt +?2 logo l'OgU +?1 lock l'Ok + mail m'eIl + mails m'eIls +?1 maior m,&j'Or- +?2 maior maI'Or +?2 maiores maI'O*is +?1 menor myn'Or- +?2 menor men'Or +?2 menores men'O*is +?2 melhor melj'Or +?2 melhores melj'O*is +?4 melhor mel^'Or +?4 melhores mel^'O*is +?2 mouse m'aUzi +?1 menu menu +?1 next n'Ekst + ok Ok'eI +?2 offline Ofl'aIN +?2 online oNlaIN + org Org +?1 ovo 'ovu +?1 pause p'au:z + page p'eIdZ +?2 pior pi'Or +?2 piores pi'O*is +preço $alt2 +python p'aIT&~N +queda $alt +?1 readme r'i:dmi: +?1 sapi s,ap'i +?1 scanner sk'En&r +?1 shift S'ift +?1 scroll sk:r'ol +?1 site s'aIt +?2 site s'aItSi +?1 software s'Oft,w'Er- +símbolo s'imbolU +?4 símbolo s'iNbolU +?2 software s'Oftwe@- +?1 space sp'eIsy +?1 sporting sp'Ort,ing +?1 tab t'ab +?1 telemóvel t,El,Em'OvEl +?1 telemóveis t,El,Em'OveIs# +?1 up &p +?1 upload &pl'oud +?2 web w'Eb +?2 verbete verb'etSi +?2 verbetes verb'etSis +?1 yahoo 'i,ah'u +?2 yahoo iah'u +?1 yes j'Es + + +// common person names +alan 'al@n +louis _^_FR + + +// foreign product names +?1 access 'aks,Es +?1 adobe &d'Oby + debian d'Ebj&~N +?1 excel ,Eks'El +?1 express ,Ekspr'Es + espeak isp'i:k +?1 espeakedit isp'i:kEd,it +?1 fedora _^_EN +?1 firefox f'ai&rfOks +?2 firefox f'ai@fOks +?1 front fr'ont +?1 jaws dZ'au:z +?1 linux l,in'uks +?2 linux l'inUks +?1 live l'aiv +?1 maker m'eIk&r- +?1 media m'Ed,i& +?1 messenger m'Es&ndZ&r- +?1 microsoft m,ik:r'os,Oft +?2 microsoft m'aIkRows'Oft +?1 movie m'uvi +?1 nero n'Eru +?1 office 'Of,is + openoffice 'opeIN|'Ofis +?1 outlook 'autl'uk +?2 Outlook ,aUtl'uk +?1 paint p'aint +?1 player pl'eI&r- +playstation _^_EN +?1 point p'oint +?1 power p'aU&r- +?1 product p:r'&d&kt +?1 Publisher p'&bl,iS&r- +?1 reader r'id,&r- +?1 setup s'Et'&p +?1 scout sk'aut // Nero scout +?1 skype sk'aip +?2 Skype sk'aIp + Slackware sl'akwe@- +?1 smart sm'art // nero StartSmart + speak spi:k + suse z'u:ts@ +?1 start st'art // nero StartSmart +?1 time t'aImy // nero show time + ubuntu ub'untu +?1 unix ,u:n'iks +?2 unix j'uniks + wagner v'agner +?3 wagner v'agIner +?1 windows w'iNd'ou:z +?2 windows w'iNdows +?1 window w'iNd'ou +?2 window w'iNdow + + +// historical/famous person names +babbage b'abidZ +bernhard bern'ard +darwin d'Arwin +dijkstra d'ijkstrA: +einstein _!'aInSt,aIn +feynman f'ainm@n +freud fr'OId +friedrich fr'i:driS +gauss g'aUs +geisel g'aIzEU +gottfried g'Otfri:t +hawking h'o:king +heisenberg h'aIzEnberg +hitler h'itler +isaac iz'&k +lavoisier lavwazj'e +leibniz l'aIbni:ts +montesquieu m,oNteskj'e +neumann n'OIman +newton n'i;utoN +oppenheimer _!'Op@nh,aImar +richard x'iS&rd +riemann r'i:man +rijndael x'ain;d'al +rousseau Rus'o +schrödinger Sr'edinger +stephen st'i:v@n +steve st'i:v +turing t'u*iNg +voltaire vOlt'Er +von f%On + + +// foreign common names/surnames +?1 alison &l'is&N +?1 cleverson kl'Evyrs&N +?2 cleverson kl'EversoN +?1 elton 'Elt&N +?1 halison &l'is&N +klein kl'aIn // Very common on southern Brazil. +?1 kleverson kl'Evers&N +krueger kR'iZer +krüger kR'iZer +kühl k'il +?1 nelson n'Els&N +mueler m'iler +mueller m'iler +müler m'iler +müller m'iler +ronchi r'OnCi: +vogel f'o:g@l +volkmann f'Olkman + + + + + + + + + + diff --git a/dictsource/pt_rules b/dictsource/pt_rules index 96702e44..9c87d4fd 100755 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -1,1045 +1,1068 @@ -// translation rules Brazilian -// This file is UTF-8 encoded - -// Options -// ?1 European Portuguese -// ?2 Brazilian Portuguese -// ?3 Epenthetic [I] between consonants -// ?4 Brazil mbrola voice - -// Letter groups -// A a vowel -// B a consonant, except h l r w y -// C a consonant -// G a voiced consonant -// K not a vowel - -// endings -.L01 a am -.L02 e em -.L03 a am o -.L04 a am e em o ue uem -.L05 r ra ram re rem rdes -.L06 ra ram ste re rem -.L07 sse ssem ste - - -.group a - _) a (_ a - _) a (_W 'a // in an acronym - a a - &) a (_ =& // in final unstressed syllable - &) a (s_ =& - &) a (_a =&/ // ?? elide final a before a - &) a (_à =&/ -?1 a (_ =& // in final unstressed syllable -?1 a (s_ =& -?1 a (_a =&/ // ?? elide final a before a -?1 a (_à =&/ - - a (C_ & - a (r_ 'a -?1 p) a (d_ =E - a (CC_ & -?1 a (l_ 'A // eg: Portugal, capital, etc. -?1 a (lK ,A // Algarve, Almerinda, etc... -?2 al (K aU - a (lh+ a - - a (m &~ - a (mAr_ & - a (mA@ & - a (n &~ - a (nA@ & - a (nAr_ & - am (_ =&~N - am (C &~m -?4 am (C &~N - an (K+ &~N - anh (A &~n^ - am (_ =&U~ -?1 a (z_ 'a //eg: paz, rapaz, capaz, etc... -?1 C) acç 'a's // eg: selecção, etc... - - ai aI - ai (s aI - a (iu_ a // caiu - a (iCK a - ay aI - ao (_ aU - au aU - au (s aU - a (uCK a - - -.group â - â ''& - â (m ''&~ - â (n ''&~ - âm (K ''&~m - ân (K ''&~N - ânh ''&~n^ - - -.group à - à a - _) à (s_ aI - - à (m &~ - à (n &~ - àm (K &~m - àn (K &~N - ành (A &~n^ - - -.group á - á ''a - ái ''aI - ái (s ''aI - á (iCK ''a - áy ''aI - áu ''aU - áu (s ''aU -?1 ál ''Al - á (uCK ''a - - -.group ã - ã &~ - ão &U~ - - -.group b - _) b (_ be - b b - b (b -?3 b (B bI -?3 b (s b -?3 b (_C b_ - - -.group c - _) c (_ se - c k - c (Y s // ce ci -?3 c (B kI -?3 c (s k -?3 c (t k -?3 c (_C k_ - ch S - ck k -?1 c (c //drop “c” in European Portuguese (eg: seleccionar) -?1 A) ct t //drop “c” in European Portuguese (eg: exacto) -?1 A) cç s //drop “c” in European Portuguese (eg: selecção) -?1 conta) ct (A kt // eg: contacto, contactar, contactável, incontactável, etc... - - -.group d - _) d (_ de - d d - d (d -?3 d (B dZI -?3 d (_C d_ -?2 d (i dZ -?2 d (í dZ -?2 d (e_ dZ - - -.group e - _) e (_ E - e e - e (_ =y - e (s_ =y -?2 e (_AN =i/ // ?? elide to [j] if next word starts with a vowel -?2 &l) e (_AN =i // but not after l or r -?2 &r) e (_AN =i -?1 e (_iN =i/ // drop final [i] is next word starts with another i - -?1 e (e i //eg: candeeiro - -?2 el (K EU - e (lh+ e - v) e (lhA_ E - - e (be_ E - e (bem_ E - - e (ca_ E - e (ce_ E - e (cem_ E - - e (chA_ E - e (chAm_ E - r) e (cho_ e - - e (clA_ E - e (clAm_ E - e (co_ E - e (ctA_ E - e (ctAm_ E - e (çA_ E - e (çAm_ E - - e (de_ E - e (dem_ E - - e (fa_ E - - e (gA_ E - e (gAm_ E - - e (grA_ E - e (grAm_ E - - h) e (gA_ e - h) e (gAm_ e - - e (gue_ E - e (guem_ E - - e (lA_ E - e (lo_ e - e (lAm_ E - - i) e (r_ E - @s) e (r_ E - u) e (r_ E - - ib) e (rA_ E - d) e (rA_ E - ed) e (rAm_ e - m) e (rA_ E - iv) e (rAm_ E - pod) e (rA_ e - d) e (rAm_ E - ib) e (rAm_ E - @s) e (rA_ E - @s) e (rAm_ E - sp) e (rA_ E - sp) e (rAm_ E - f) e (re_ E - f) e (rem_ E - - e (rgA_ E - e (rgAm_ E - - e (rsA_ E - e (rsAm_ E - - e (se_ E - e (sem_ E - - e (ssA_ E - e (ssAm_ E - - e (stA_ E - e (stAm_ E - e (strA_ E - - e (rnA_ E - e (rnAm_ E - - e (rtA_ E - e (rtAm_ E - - e (rrA_ E - e (rrAm_ E - - e (rvA_ E - e (rvAm_ E - - e (tA_ E - An) e (tA_ e - gaz) e (ta_ e - e (tAm_ E - - e (vA_ E - t) e (ve_ e - e (vi_ e - e (vê_ e - e (vAm_ E - - e (rrAs_ E - - e (x_ E - e (xA_ E - e (xAm_ E -?2 _n) e (t E - - em (C eIm - en (K eIN - enh en^ - - em (_ =eIN - em (s_ =eIN - en (_ =eIN - en (s_ =eIN - - ei eI - ei (s eI - ei ($w_alt EI - e (iCK e - ey eI - eu eU - eu (s eU - e (uCK e - -?1 d) e (CAA y -?1 d) e (CACAA y -?1 d) e (CACAC y -?1 d) e (CACC y -?1 d) e (CCAA y -?1 d) e (nCAA ,e -?1 d) e (CCACA y -?1 d) e (nCACA ,e -?1 d) e (CCACCA y -?1 d) e (nCACCA ,e - - j) e (tA_ E - j) e (tAm_ E - _r) eex (A eez - -?1 _) es (C@@ S // drop initial "e". -?1 _) e (f i // efectuar, etc. -?1 _n) e (nhu i // eg: nenhum, nenhuma, nenhuns, nenhumas. -?1 e (la_ 'E // eg: cadela, janela, vela, etc... -?1 C) e (cC ,E // eg: seleccionar, efectuar, etc... -?1 C) ecç 'E's // eg: selecção, etc... -?1 C) e (ã i // leão, panteão, etc. -?1 C) e (a i // oceano, etc. -?1 C) e (o 'i // eg: geologia, etc... -?1 C) e (ú i // conteúdo, etc. -?1 Cã) e j // cães, mãe, etc... -?1 c) e (rea y // cereais -?1 d) e (fici y // deficiênte, deficiência, etc... -?1 _d) e (fini y //definições. -?1 _d) e (slig y // desligar. -?1 _d) e (sloc y // eg: deslocamento, etc... -?1 _f) e (ch y // fechar -?1 _p) e (rcentag y // percentagem -?1 p) e (ssoa y //pessoal, pessoais, etc. -?1 pr) e (cis y // precisar -?1 pr) e (f y // preferências, etc. -?1 _r) e (cicl y // recicla, reciclagem, etc... -?1 r) e (cor y // recorrer, recordar -?1 r) e (luz y // eg: reluzir -?1 r) e (lva ,E // eg: relvado -?1 r) e (smung y // resmungar -?1 r) e (ss y // eg: ressequidos -?1 r) e (volv y // revolver -?1 r) e (vel y // revelar -?1 _t) e (rmin y // terminar. -?1 _v) e (loci y // velocidade -?1 _f) e (rramenta y // ferramenta, ferramentas. -?1 _p) e (squ y // pesquisar -?1 hip) e (r ,E // eg: hiper -?1 sup) e (r ,E // super -?1 _m) e (ga ,E // mega -?1 _int) e (rn ,E // Interno -?1 n) e (t 'E // eg: net -?1 e (l_ 'E // eg: possível, manuel, etc... -?1 v) e (l_ ,E // eg: possível, amovível, disponível, etc... -?1 l) e (ta 'E // eg: bicicleta, atleta. - - - sf) e (ra_ E // esfera, biosfera - -//sort - _fiz) e (L05_ E - _exag) e (L05_ E - _houv) e (L05_ E - _perd) e (L05_ e - _soub) e (L05_ E - _rend) e (L06_ e - _vend) e (L06_ e - _atend) e (L06_ e -_compreend) e (L06_ e -_entend) e (L06_ e -_estend) e (L06_ e -respond) e (L06_ e // cor- - com) e (L07_ e - _bat) e (L07_ e - _beb) e (L07_ e - _tem) e (L07_ e - _viv) e (L07_ e - colh) e (L07_ e // & es- - _corr) e (L07_ e - _eleg) e (L07_ e - _morr) e (L07_ e - _perd) e (L07_ e - _sofr) e (L07_ e - _torc) e (L07_ e - _venc) e (L07_ e - _adoec) e (L07_ e - _aperd) e (L07_ e - _merec) e (L07_ e - conhec) e (L07_ e // & re- - entend) e (L07_ e - preend) e (L07_ e // sur- com- - respond) e (L07_ e // cor- -_convenc) e (L07_ e -_entristec) e (L07_ e -_envaidec) e (L07_ e -_escond) e (L07_ e -_obedec) e (L07_ e -interromp) e (L07_ e -intromet) e (L07_ e - qu) e (brL04_ E - _hosp) e (dL03_ E - _estr) ei (L03_ EI - _inv) e (jL04_ E - _dec) e (pL04_ E - _p) e (quL02_ E - _s) e (quL02_ E - l) e (que_ E - _imp) e (rL03_ E - _reit) e (rL03_ E - _g) e (rL04_ E - _op) e (rL04_ E - _qu) e (rL04_ E - _alt) e (rL04_ E - _sup) e (rL04_ E - _tol) e (rL04_ E - _coop) e (rL04_ E - _temp) e (rL04_ E - _) e (rguL02_ E - _alb) e (rguL02_ E - _enx) e (rguL02_ E - _inv) e (rtL03_ e - _f) e (rvL03_ e - _p) e (scL03_ E - _m) e (sclL04 E - _l) e (ssL02_ e - _esp) e (ssL03_ e - _m) e (tL03_ e - _com) e (tL03_ e - _rem) e (tL03_ e - _derr) e (tL03_ e - _prom) e (tL03_ e - _subm) e (tL03_ e -_comprom) e (tL03_ e - _sol) e (trL03_ E - _pen) e (trL04_ E - scr) e (vL03_ e // e- in- pre- ree- - _atr) e (vL03_ e - _descr) e (vL03_ e - _pr) e (zL04_ E - _embel) e (zL04_ E - par) e (çL01_ e // pareça, apareça - _acont) e (çL01_ e - _arref) e (çL01_ e - _ado) e (çL03_ e - _aqu) e (çL03_ e - _car) e (çL03_ e - _mer) e (çL03_ e - _pad) e (çL03_ e - _per) e (çL03_ e - _esqu) e (çL03_ e - _obed) e (çL03_ e - _ofer) e (çL03_ e - _aborr) e (çL03_ e -_compar) e (çL03_ e -_desapar) e (çL03_ e -_enfraqu) e (çL03_ e -_enriqu) e (çL03_ e -_envaid) e (çL03_ e -_esclar) e (çL03_ e -_reapar) e (çL03_ e -_reconh) e (çL03_ e -//endsort - - - -.group é - é ''E - éi ''EI - éi (s ''EI - é (iCK ''E - éy ''eI - éu ''EU - éu (s ''EU - é (uCK ''E - ém (_ ''eIN - ém (s_ ''eIN - én (_ ''eIN - én (s_ ''eIN - - -.group ê - ê ''e - êm (_ ''eIN - êm (C ''eIm - ên (K ''eIN - ênh ''en^ - êm (_ ''eIN - - -.group f -?1 _) f (_W Ef; // within an acronym -?1 _) f (_ Ef // individual letter or end-of-acronym - _) f (_ 'Efe - f f - f (f -?3 f (B fI -?3 f (_C f_ - - -.group g -?1 _) g (_ ge -?1 _) g (_W Ze // within an acronym - _) g (_ Ze - g g - g (g -?3 g (B gI -?3 g (_C g_ - g (Y Z // ge gi - gu (Y g -?1 guen (C gw'eIN // aguenta, etc. -?1 n) gu (A gw // eg: língua, etc. -?1 man) gu (ei g // mangueira -?1 gu (ém_ g // eg: alguém, ninguém, etc... - - -.group h - _) h (_ ag'a - h // silent - - -.group i - _) i (_ i - i i - i (A j - i (o i - Cr) i i - Cl) i i - i (_ 'i - -?2 il (K iU - i (lh+ i - - im (_ iN - im (C im -?4 im (C iN - in (C iN // ?4 ?? - in (g iN - in (k iN - inh in^ - - i (A_ 'i - i (am_ 'i - io (_ iU - io (s_ iU - i (oCK i - iu (_ iU - iu (s_ iU - i (uCK i - - áC) i (A_ j - áCC) i (A_ j - âC) i (A_ j - âCC) i (A_ j - éC) i (A_ j - éCC) i (A_ j - êC) i (A_ j - êCC) i (A_ j - íC) i (A_ j - íCC) i (A_ j - óC) i (A_ j - óCC) i (A_ j - ôC) i (A_ j - ôCC) i (A_ j - úC) i (A_ j - úCC) i (A_ j - -?1 _) i (ntern 'i //inter -?1 @) ing (_ _^_EN -?1 @) ings (_ _^_EN - - -.group í - í ''i - í (m ''i - í (n ''i - ím (_ ''iN - ím (C ''im - ín (K ''iN - ính ''in^ - - -.group j - _) j (_ Z'Ot& - j Z -?3 j (B ZI -?3 j (_C Z_ - - -.group k -?1 _) k (_ k'ap& -?2 _) k (_ ka - k k - k (k -?3 k (B kI -?3 k (s k -?3 k (t k -?3 k (_C k_ - - -.group l -?1 _) l (_W El; // within an acronym -?1 _) l (_ El - _) l (_ 'Ele - l l - l) l - lh l^ - A) lh lj -?1 A) lh l^ -?4 A) lh l^ - - -.group m -?1 _) m (_W Em; -?1 _) m (_ Em - _) m (_ 'eme - m m - m (m -?3 m (B mI -?3 m (_C m_ - - -.group n -?1 _) n (_W En; -?1 _) n (_ En - _) n (_ 'ene - n n - n (n -?3 n (B nI -?3 n (_C n_ - nh n^ -?1 A) nn n //drop “n” (eg: connosco). - - -.group o - o o - @) o (_ =U - o (s_ =U - ou ow - oi oI - oi ($w_alt OI - oi ($w_alt2++ oI - oi (a_ OI // ?? - oi (cA_ OI - oi (de_ OI - oi (s oI - o (iCK o -?1 C) oo (_ ow // eg: voo, enjoo, etc... - oy OI - - o (cA_ O - o (cAm_ O - - o (que_ O - o (quem_ O - - p) o (dA_ O - p) o (dAm_ O - - o (g_ O - o (gs_ O - - o (ge_ O - o (gem_ O - - o (jA_ O - o (jAm_ O - - o (ldA_ O - o (ldAm_ O - - o (lA_ O - o (lAm_ O - - o (ltA_ O - o (ltAm_ O - - o (sA_ O - o (so_N o // not for osos_ - o (sAm_ O - - o (ssA_ O - o (ssAm_ O - - o (va_ O - o (vAm_ O - o (ve_ O - m) o (va_ o - m) o (vam_ o - o (veCs_ O - -?1 o (l_ 'O -?2 ol (_ Ow - o (lh o -?2 _) o (lhA_ O -?2 _) o (lhAm_ O - om (_ oN - o (ma_ o - - om (C om -?4 om (C oN - on (K oN - @s) on (_ %oN // words ending in -son - o (na_ o - onh on^ - - o (brA_ O - o (brAm_ O - o (dA_ O - o (dAm_ O - t) o (dA_ o - - o (rCA_ O - o (rCo_ o - o (rCAm_ O - - o (stA_ O - o (sto_ o - o (stAm_ O - o (strA_ O - o (strAm_ O - - o (tA_ O - o (tAm_ O - -?2 o (x_ O -?1 oz (_ Os# -?2 oz (_ Oz - o (zes_ O - o (rA_ O - b) o (re_ o - c) o (re_ o - d) o (re_ o - l) o (re_ o - t) o (re_ o - v) o (re_ o - o (rAm_ O - b) o (rA_ O - @@) o (rA_ o - - o (p_ O -?1 _) o (C O // eg: olá, orla, opção, etc... -?1 _C) o (CACAC u // Documento, documentação, localizar, etc. -?1 f) o (rmat u // formatar, formato. -?1 _p) o (rtuC u // Portugal, Portucalense, etc... -?1 pr) o (f u -?1 _s) o (lu u // solução, soluções. -?1 interr) o (g u // eg: interrogação -?1 f) o (rmulá u // eg: formulário, formulários. -?1 v) o (lt O - -//sort - _engl) o (bL01_ O - _esn) o (bL04_ O - _deb) o (chL04_ O -_desabr) o (chL04_ O - _r) o (gL04_ O - _adv) o (gL04_ O - _ref) o (gL04_ O - _ap) oi (L01_ OI - _esc) o (lhL02_ O - _m) o (lhL04_ O - _abs) o (lvL02_ O - _env) o (lvL02_ O - _rev) o (lvL02_ O -_desenv) o (lvL02_ O - _ent) o (pL02_ O - c) o (rrL01_ o // escorra, incorra, corra, recorra - _m) o (rrL01_ o - _r) o (snL01_ O - _c) o (spL02_ O - p) ostos (_ Ost=Us# // dispostos etc. -//endsort - -.group ô - ô ''o - ôm (_ ''oN - ôm (C ''om - ôn (K ''oN - ônh ''on^ - - -.group ó - ó ''O - - ói ''OI - ói (s ''OI - ó (iCK ''O - óu ''Ow - óy ''OI - - -.group õ - õ o~ - õe o~j - - -.group p - _) p (_ pe - p p - p (p -?3 p (B pI -?3 p (s p -?3 p (t p -?3 p (_C p_ -?1 ph f //Didn’t use in European Portuguese (eg: English) -?1 ple (_ _^_EN - - -.group q - _) q (_ ke - q k -?3 q (B kI - qu kw - qü kw - qu (Y k - qu (K ku -?2 _) que (_K ke - _) que (_ ky -?1 _) qua kwa // quatro, etc. -?1 _) que ke // quente, etc. -?1 _) quei (C k'eI // queira, queima, etc -?1 C) quen (C kw'eIN // cinquenta, etc. -?1 A) quen (C kw'eIN // frequência, etc. -?1 quec kes // esquece, etc. -?1 queç kes // esqueça. -?1 A) que (nA_ ke // pequeno, etc. -?1 C) quê (_ ke // porquê, etc. -?1 que (l ke // aquele, etc. -?1 que (r_ kE // qualquer, etc. -?1 qui ki // quinta, esquilo, etc. -?1 _) quind kuind // quindecágono, etc. -?1 tran) qui kui // tranquilo, etc. -?1 _) quo kuo // quoficiente, etc. - - -.group r -?1 _) r (_W 'Err; // within an acronym -?1 _) r (_ 'Err - _) r (_ 'Exe - _) r (_\$ xe'aU // currency - r * - r (_ r - r (C *@- - A) r (A * - A) r (_A * - rr x - XC) r (A R - C) r (A * -//?1 C) r (A r - _) r x - l) r x - n) r (+ x - s) r x -?1 A) r (_ r- // [r-] is English linking-r - - -.group s -?1 _) s (_W Es|; within an acronym [s]+[;] not [s;] phoneme -?1 _) s (_ Es -?2 _) s (_ 'Ese - s s - ss s - sc (Y s - sç s - sh S -?4 _) s (C Is - A) s (A z -?1 @) s (_ s# -?2 s (_ s# - @) s (_A z // next word starts with vowel -?!4 @) s (_G z // next word starts with voiced consonant - - A) s (_S1 s - A) s (_AS1 z // next word starts with vowel - ese) s (_ s -?!4 A) s (_GS1 z // next word starts with voiced consonant - -?1 A) s (C s# -?1 A) ss s -?1 A) s (G+ Z -?1 A) s (_KS1 s# -?1 A) s (_G+S1 Z - - _) sobre (@P5 sob*e - - -.group t - _) t (_ te - t t - t (t -?3 t (B tSI -?3 t (_C t_ -?2 t (i tS -?2 t (í tS -?2 t (e_ tS -?1 th _^_EN -?1 tion (_ _^_EN - - -.group u - _) u (_ u - u u - u (A w - u (_A w - r) u (A u - r) u (_A u - u (A_ 'u - - u (am_ 'u - u (em_ 'u - ui uI - ui (_ 'uI - u (iu w - u (iCK u - uy uI - - um (_ u~N - um (C u~m -?4 um (C u~N - un (K u~N - unh u~n^ - - g) u (Y - - -.group ú - ú ''u - úm (_ ''u~N - úm (C ''u~m -?4 úm (C ''u~N - ún (K ''u~N - únh ''u~n^ - -.group v - v v - v (v -?3 v (B vI -?3 v (_C v_ - - -.group w -?1 _) w (_ d'&bl,iu -?2 _) w (_ d'ablju - w w -?1 w (_ _^_EN -?4 _) w u - - -.group x - x (A S - A) x (A ks - _e) x (A z - _ê) x (A z - _ine) x (A z - e) x (A ks -?1 e) x (CA S - ai) x (A S - ei) x (A S - _au) x s - ou) x (+ S - u) x (i S - x (iqu S - x (C s - xc (Y s - x (s - x (_ ks - x (AxA S - x (ó_ z - a) x (a S - a) x (á S - a) x (ar S - a) x (ei S - xA) x (A S - ale) x (a S - bau) x (A S - brA) x (A S - bY) x (A S - _ca) x (A S - _co) x (A S - _coe) x (A z - _fa) x (i S - _fle) x (a S - gra) x (A S - _he) x (A z - _li) x (A S - _lu) x (A S - _mar) x ks - má) x (im s // máximo, máximas, etc. - me) x (A S - _mé) x (i S - mo) x (a S - _o) x (A S - _o) x (i ks - _o) x (í ks - pi) x (A S - _pro) x (A S - _pra) x (A S - prA) x (i s // aproximado, aproximadamente, aproximar, próximo, etc. - pu) x (A S // verb "puxar" and all its conjugations - qui) x (A S - ri) x (A S - rela) x (A S - _ro) x (A S - _trou) x (e s - _trou) xe (@ sE - _ve) x (A S - _xi) x (A S -?1 i) x (a_ S -?1 i) x (as_ S - _trou) x (ér s - _pro) x (imi s - - -.group y -?1 _) y (_ 'ips,ilON -?2 _) y (_ 'ipsiloN - y i - y (A j - y (_ %i // ?? stress on 1st syllable EN - - -.group z - _) z (_ ze - z z - z (z -?3 z (B zI -?3 z (_C z_ -?1 @) z (_ S -?2 @) z (_ s - @) z (_A z - @) z (_G z - -?1 A) z (C S -?1 A) z (G+ Z -?1 A) z (_C S -?1 A) z (_G+ Z - - -.group - ç s - - ü u - ß s - - $ sifR'&U~ - _r_) $ - - D_) º %o // ordinal - D_) ª %a // ordinal - - - , (D v'irgul& - - - __) - (_D m'enUs - A_) - (_D _ - C_) - (_D _ - +// translation rules Brazilian +// This file is UTF-8 encoded + +// Options +// ?1 European Portuguese +// ?2 Brazilian Portuguese +// ?3 Epenthetic [I] between consonants +// ?4 Brazil mbrola voice + +// Letter groups +// A a vowel +// B a consonant, except h l r w y +// C a consonant +// G a voiced consonant +// K not a vowel + +// endings +.L01 a am +.L02 e em +.L03 a am o +.L04 a am e em o ue uem +.L05 r ra ram re rem rdes +.L06 ra ram ste re rem +.L07 sse ssem ste + + +.group a + _) a (_ a + _) a (_W 'a // in an acronym + a a + &) a (_ =& // in final unstressed syllable + &) a (s_ =& + &) a (_a =&/ // ?? elide final a before a + &) a (_à =&/ +?1 a (_ =& // in final unstressed syllable +?1 a (s_ =& +?1 a (_a =&/ // ?? elide final a before a +?1 a (_à =&/ + + a (C_ & + a (r_ 'a +?1 p) a (d_ =E + a (CC_ & +?1 a (l_ 'A // eg: Portugal, capital, etc. +?1 a (lK ,A // Algarve, Almerinda, etc... +?2 al (K aU + a (lh+ a + + a (m &~ + a (mAr_ & + a (mA@ & + a (n &~ + a (nA@ & + a (nAr_ & + am (_ =&~N + am (C &~m +?4 am (C &~N + an (K+ &~N + anh (A &~n^ + am (_ =&U~ + a (z_ 'a //eg: paz, rapaz, capaz, etc... +?1 C) acç 'a's // eg: selecção, etc... + + ai aI + ai (s aI + a (iu_ a // caiu + a (iCK a + ay aI + ao (_ aU + au aU + au (s aU + a (uCK a + + +.group â + â ''& + â (m ''&~ + â (n ''&~ + âm (K ''&~m + ân (K ''&~N + ânh ''&~n^ + + +.group à + à a + _) à (s_ aI + + à (m &~ + à (n &~ + àm (K &~m + àn (K &~N + ành (A &~n^ + + +.group á + á ''a + ái ''aI + ái (s ''aI + á (iCK ''a + áy ''aI + áu ''aU + áu (s ''aU +?1 ál ''Al + á (uCK ''a + + +.group ã + ã &~ + ão &U~ + + +.group b + _) b (_ be + b b + b (b +?3 b (B bI +?3 b (s b +?3 b (_C b_ + + +.group c + _) c (_ se + c k + c (Y s // ce ci +?3 c (B kI +?3 c (s k +?3 c (t k +?3 c (_C k_ + ch S + ck k +?1 c (c //drop “c” in European Portuguese (eg: seleccionar) +?1 A) ct t //drop “c” in European Portuguese (eg: exacto) +?1 A) cç s //drop “c” in European Portuguese (eg: selecção) +?1 conta) ct (A kt // eg: contacto, contactar, contactável, incontactável, etc... + + +.group d + _) d (_ de + d d + d (d +?3 d (B dZI +?3 d (_C d_ +?2 d (i dZ +?2 d (í dZ +?2 d (e_ dZ + + +.group e + _) e (_ E + e e + e (_ =y + e (s_ =y +?2 e (_AN =i/ // ?? elide to [j] if next word starts with a vowel +?2 &l) e (_AN =i // but not after l or r +?2 &r) e (_AN =i +?1 e (_iN =i/ // drop final [i] is next word starts with another i + +?1 e (e i //eg: candeeiro + +?2 el (K EU + e (lh+ e + v) e (lhA_ E + + e (be_ E + e (bem_ E + + e (ca_ E + e (ce_ E + e (cem_ E + + e (chA_ E + e (chAm_ E + r) e (cho_ e + + e (clA_ E + e (clAm_ E + e (co_ E + e (ctA_ E + e (ctAm_ E + e (çA_ E + e (çAm_ E + + e (de_ E + e (dem_ E + + e (fa_ E + + e (gA_ E + e (gAm_ E + + e (grA_ E + e (grAm_ E + + h) e (gA_ e + h) e (gAm_ e + + e (gue_ E + e (guem_ E + + e (lA_ E + e (lo_ e + e (lAm_ E + + i) e (r_ E + @s) e (r_ E + u) e (r_ E + + ib) e (rA_ E + d) e (rA_ E + ed) e (rAm_ e + m) e (rA_ E + iv) e (rAm_ E + pod) e (rA_ e + d) e (rAm_ E + ib) e (rAm_ E + @s) e (rA_ E + @s) e (rAm_ E + sp) e (rA_ E + sp) e (rAm_ E + f) e (re_ E + f) e (rem_ E + + e (rgA_ E + e (rgAm_ E + + e (rsA_ E + e (rsAm_ E + + e (se_ E + e (sem_ E + + e (ssA_ E + e (ssAm_ E + + e (stA_ E + e (stAm_ E + e (strA_ E + + e (rnA_ E + e (rnAm_ E + + e (rtA_ E + e (rtAm_ E + + e (rrA_ E + e (rrAm_ E + + e (rvA_ E + e (rvAm_ E + + e (tA_ E + An) e (tA_ e + gaz) e (ta_ e + e (tAm_ E + + e (vA_ E + t) e (ve_ e + e (vi_ e + e (vê_ e + e (vAm_ E + + e (rrAs_ E + + e (x_ E + e (xA_ E + e (xAm_ E +?2 _n) e (t E + + em (C eIm + en (K eIN + enh en^ + + em (_ =eIN + em (s_ =eIN + en (_ =eIN + en (s_ =eIN + + ei eI + ei (s eI + ei ($w_alt EI + e (iCK e + ey eI + eu eU + eu (s eU + e (uCK e + +?1 d) e (CAA y +?1 d) e (CACAA y +?1 d) e (CACAC y +?1 d) e (CACC y +?1 d) e (CCAA y +?1 d) e (nCAA ,e +?1 d) e (CCACA y +?1 d) e (nCACA ,e +?1 d) e (CCACCA y +?1 d) e (nCACCA ,e + + j) e (tA_ E + j) e (tAm_ E + _r) eex (A eez + +?1 _) es (C@@ S // drop initial "e". +?1 _) e (f i // efectuar, etc. +?1 _n) e (nhu i // eg: nenhum, nenhuma, nenhuns, nenhumas. +?1 e (la_ 'E // eg: cadela, janela, vela, etc... +?1 C) e (cC ,E // eg: seleccionar, efectuar, etc... +?1 C) ecç 'E's // eg: selecção, etc... +?1 C) e (ã i // leão, panteão, etc. +?1 C) e (a i // oceano, etc. +?1 C) e (o 'i // eg: geologia, etc... +?1 C) e (ú i // conteúdo, etc. +?1 Cã) e j // cães, mãe, etc... +?1 c) e (rea y // cereais +?1 d) e (fici y // deficiênte, deficiência, etc... +?1 _d) e (fini y //definições. +?1 _d) e (slig y // desligar. +?1 _d) e (sloc y // eg: deslocamento, etc... +?1 _f) e (ch y // fechar +?1 _p) e (rcentag y // percentagem +?1 p) e (ssoa y //pessoal, pessoais, etc. +?1 pr) e (cis y // precisar +?1 pr) e (f y // preferências, etc. +?1 _r) e (cicl y // recicla, reciclagem, etc... +?1 r) e (cor y // recorrer, recordar +?1 r) e (luz y // eg: reluzir +?1 r) e (lva ,E // eg: relvado +?1 r) e (smung y // resmungar +?1 r) e (ss y // eg: ressequidos +?1 r) e (volv y // revolver +?1 r) e (vel y // revelar +?1 _t) e (rmin y // terminar. +?1 _v) e (loci y // velocidade +?1 _f) e (rramenta y // ferramenta, ferramentas. +?1 _p) e (squ y // pesquisar +?1 hip) e (r ,E // eg: hiper +?1 sup) e (r ,E // super +?1 _m) e (ga ,E // mega +?1 _int) e (rn ,E // Interno +?1 n) e (t 'E // eg: net +?1 e (l_ 'E // eg: possível, manuel, etc... +?1 v) e (l_ ,E // eg: possível, amovível, disponível, etc... +?1 l) e (ta 'E // eg: bicicleta, atleta. + + + sf) e (ra_ E // esfera, biosfera + +//sort + _fiz) e (L05_ E + _com) e (L05_ e +tiv) e (L05_ E // es- +_coub) e (L05_ E +_exag) e (L05_ E +_houv) e (L05_ E +_perd) e (L05_ e +_soub) e (L05_ E +_rend) e (L06_ e +_vend) e (L06_ e + _atend) e (L06_ e +_compreend) e (L06_ e +_entend) e (L06_ e +_estend) e (L06_ e +respond) e (L06_ e // cor- +_com) e (L07_ e +_envelhec) e (L07_ e +_esclarec) e (L07_ e +_escurec) e (L07_ e +padec) e (L07_ e // com- +parec) e (L07_ e // a- rea- com- desa- +_defend) e (L07_ e +vert) e (L07_ e // in- re- con- +_depend) e (L07_ e +_arrepend) e (L07_ e +ced) e (L07_ e // pro- con- su- +_mord) e (L07_ e +bat) e (L07_ e // re- com- +_esquec) e (L07_ e +_ergu) e (L07_ e +met) e (L07_ e // co- pro- arre- re- intro- compro- sub- +_amanhec) e (L07_ e +_aborrec) e (L07_ e +_anoitec) e (L07_ e +_enlouquec) e (L07_ e +_beb) e (L07_ e +_tem) e (L07_ e +viv) e (L07_ e // re- +colh) e (L07_ e // & es- +corr) e (L07_ e // per- con- in- so- dis- +_eleg) e (L07_ e +_morr) e (L07_ e +_perd) e (L07_ e +_sofr) e (L07_ e +torc) e (L07_ e // con- +venc) e (L07_ e // con- +_adoec) e (L07_ e +aprend) e (L07_ e // re- +merec) e (L07_ e // des- +conhec) e (L07_ e // & re- des- +entend) e (L07_ e +preend) e (L07_ e // sur- com- +respond) e (L07_ e // cor- +_entristec) e (L07_ e +_envaidec) e (L07_ e +_escond) e (L07_ e +_obedec) e (L07_ e +_interromp) e (L07_ e +qu) e (brL04_ E +_hosp) e (dL03_ E +_amanh) e (çL03_ e +_bez) e (rrL03_ e + prom) e (tL03_ e // com- +_v) e (rbL03_ E +_envelh) e (çL03_ e +_enlouqu) e (çL03_ e +_entrist) e (çL03_ e +conh) e (çL03_ e // re- +_anoit) e (çL03_ e +_estr) ei (L03_ EI +_inv) e (jL04_ E +_dec) e (pL04_ E +_p) e (quL02_ E + _s) e (quL02_ E +l) e (que_ E +_imp) e (rL03_ E +_reit) e (rL03_ E + _fortal) e (çL03_ e + abast) e (çL03_ e // re- + _g) e (rL04_ E + _op) e (rL04_ E + _qu) e (rL04_ E + _alt) e (rL04_ E + _sup) e (rL04_ E + _tol) e (rL04_ E + _coop) e (rL04_ E + _temp) e (rL04_ E + _) e (rguL02_ E + _alb) e (rguL02_ E + _enx) e (rguL02_ E + _inv) e (rtL03_ e + _f) e (rvL03_ e + _p) e (scL03_ E + _m) e (sclL04 E + _l) e (ssL02_ e + _esp) e (ssL03_ e + _m) e (tL03_ e + _com) e (tL03_ e +_rem) e (tL03_ e +_derr) e (tL03_ e +_sol) e (trL03_ E +_pen) e (trL04_ E +scr) e (vL03_ e // e- in- pre- ree- de- + _atr) e (vL03_ e + _pr) e (zL04_ E +_embel) e (zL04_ E +_acont) e (çL01_ e +_arref) e (çL01_ e +_ado) e (çL03_ e + _estrem) e (çL03_ e + par) e (çL03_ e // a- re- com- rea- desa- + _aqu) e (çL03_ e + _car) e (çL03_ e + _mer) e (çL03_ e + _pad) e (çL03_ e // com- + _per) e (çL03_ e + _esqu) e (çL03_ e + _obed) e (çL03_ e + _ofer) e (çL03_ e + _aborr) e (çL03_ e +_enfraqu) e (çL03_ e +_enriqu) e (çL03_ e +_envaid) e (çL03_ e +_esclar) e (çL03_ e +_ven) e (rL04_ E +//endsort + + + +.group é + é ''E + éi ''EI + éi (s ''EI + é (iCK ''E + éy ''eI + éu ''EU + éu (s ''EU + é (uCK ''E + ém (_ ''eIN + ém (s_ ''eIN + én (_ ''eIN + én (s_ ''eIN + + +.group ê + ê ''e + êm (_ ''eIN + êm (C ''eIm + ên (K ''eIN + ênh ''en^ + êm (_ ''eIN + + +.group f +?1 _) f (_W Ef; // within an acronym +?1 _) f (_ Ef // individual letter or end-of-acronym + _) f (_ 'Efe + f f + f (f +?3 f (B fI +?3 f (_C f_ + + +.group g +?1 _) g (_ ge +?1 _) g (_W Ze // within an acronym + _) g (_ Ze + g g + g (g +?3 g (B gI +?3 g (_C g_ + g (Y Z // ge gi + gu (Y g +?1 guen (C gw'eIN // aguenta, etc. +?1 n) gu (A gw // eg: língua, etc. +?1 man) gu (ei g // mangueira +?1 gu (ém_ g // eg: alguém, ninguém, etc... + + +.group h + _) h (_ ag'a + h // silent + + +.group i + _) i (_ i + i i + i (A j + i (o i + Cr) i i + Cl) i i + i (_ 'i + +?2 il (K iU + i (lh+ i + + im (_ iN + im (C im +?4 im (C iN + in (C iN // ?4 ?? + in (g iN + in (k iN + inh in^ + + i (A_ 'i + i (am_ 'i + io (_ iU + io (s_ iU + i (oCK i + iu (_ iU + iu (s_ iU + i (uCK i + + áC) i (A_ j + áCC) i (A_ j + âC) i (A_ j + âCC) i (A_ j + éC) i (A_ j + éCC) i (A_ j + êC) i (A_ j + êCC) i (A_ j + íC) i (A_ j + íCC) i (A_ j + óC) i (A_ j + óCC) i (A_ j + ôC) i (A_ j + ôCC) i (A_ j + úC) i (A_ j + úCC) i (A_ j + +?1 _) i (ntern 'i //inter +?1 @) ing (_ _^_EN +?1 @) ings (_ _^_EN + + +.group í + í ''i + í (m ''i + í (n ''i + ím (_ ''iN + ím (C ''im + ín (K ''iN + ính ''in^ + + +.group j + _) j (_ Z'Ot& + j Z +?3 j (B ZI +?3 j (_C Z_ + + +.group k +?1 _) k (_ k'ap& +?2 _) k (_ ka + k k + k (k +?3 k (B kI +?3 k (s k +?3 k (t k +?3 k (_C k_ + + +.group l +?1 _) l (_W El; // within an acronym +?1 _) l (_ El + _) l (_ 'Ele + l l + l) l + lh l^ + A) lh lj +?1 A) lh l^ +?4 A) lh l^ + + +.group m +?1 _) m (_W Em; +?1 _) m (_ Em + _) m (_ 'eme + m m + m (m +?3 m (B mI +?3 m (_C m_ + + +.group n +?1 _) n (_W En; +?1 _) n (_ En + _) n (_ 'ene + n n + n (n +?3 n (B nI +?3 n (_C n_ + nh n^ +?1 A) nn n //drop “n” (eg: connosco). + + +.group o + o o + @) o (_ =U + o (s_ =U + ou ow + oi oI + oi ($w_alt OI + oi ($w_alt2++ oI + oi (a_ OI // ?? + oi (cA_ OI + oi (de_ OI + oi (s oI + o (iCK o +?1 C) oo (_ ow // eg: voo, enjoo, etc... + oy OI + + o (cA_ O + o (cAm_ O + + o (que_ O + o (quem_ O + + p) o (dA_ O + p) o (dAm_ O + + o (g_ O + o (gs_ O + + o (ge_ O + o (gem_ O + + o (jA_ O + o (jAm_ O + + o (ldA_ O + o (ldAm_ O + + o (lA_ O + o (lAm_ O + + o (ltA_ O + o (ltAm_ O + + o (sA_ O + o (so_N o // not for osos_ + o (sAm_ O + + o (ssA_ O + o (ssAm_ O + + o (va_ O + o (vAm_ O + o (ve_ O + m) o (va_ o + m) o (vam_ o + o (veCs_ O + +?1 o (l_ 'O +?2 ol (_ Ow + o (lh o +?2 _) o (lhA_ O +?2 _) o (lhAm_ O + om (_ oN + o (ma_ o + + om (C om +?4 om (C oN + on (K oN + @s) on (_ %oN // words ending in -son + o (na_ o + onh on^ + + o (brA_ O + o (brAm_ O + o (dA_ O + o (dAm_ O + t) o (dA_ o + + o (rCA_ O + o (rCo_ o + o (rCAm_ O + + o (stA_ O + o (sto_ o + o (stAm_ O + o (strA_ O + o (strAm_ O + + o (tA_ O + o (tAm_ O + +?2 o (x_ O +?1 oz (_ Os# +?2 oz (_ Oz + o (zes_ O + o (rA_ O + b) o (re_ o + c) o (re_ o + d) o (re_ o + l) o (re_ o + t) o (re_ o + v) o (re_ o + o (rAm_ O + b) o (rA_ O + @@) o (rA_ o + + o (p_ O +?1 _) o (C O // eg: olá, orla, opção, etc... +?1 _C) o (CACAC u // Documento, documentação, localizar, etc. +?1 f) o (rmat u // formatar, formato. +?1 _p) o (rtuC u // Portugal, Portucalense, etc... +?1 pr) o (f u +?1 _s) o (lu u // solução, soluções. +?1 interr) o (g u // eg: interrogação +?1 f) o (rmulá u // eg: formulário, formulários. +?1 v) o (lt O + +//sort + _engl) o (bL01_ O + _esn) o (bL04_ O + _deb) o (chL04_ O +_desabr) o (chL04_ O + _r) o (gL04_ O + _adv) o (gL04_ O + _ref) o (gL04_ O + _ap) oi (L01_ OI + _esc) o (lhL02_ O + _m) o (lhL04_ O + _abs) o (lvL02_ O + _env) o (lvL02_ O + _rev) o (lvL02_ O +_desenv) o (lvL02_ O + _ent) o (pL02_ O + c) o (rrL01_ o // escorra, incorra, corra, recorra + _m) o (rrL01_ o + _c) o (spL02_ O + p) ostos (_ Ost=Us# // dispostos etc. +//endsort + +.group ô + ô ''o + ôm (_ ''oN + ôm (C ''om + ôn (K ''oN + ônh ''on^ + + +.group ó + ó ''O + + ói ''OI + ói (s ''OI + ó (iCK ''O + óu ''Ow + óy ''OI + + +.group õ + õ o~ + õe o~j + + +.group p + _) p (_ pe + p p + p (p +?3 p (B pI +?3 p (s p +?3 p (t p +?3 p (_C p_ +?1 ph f //Didn’t use in European Portuguese (eg: English) +?1 ple (_ _^_EN + + +.group q + _) q (_ ke + q k +?3 q (B kI + qu kw + qü kw + qu (Y k + qu (K ku +?2 _) que (_K ke + _) que (_ ky +?1 _) qua kwa // quatro, etc. +?1 _) que ke // quente, etc. +?1 _) quei (C k'eI // queira, queima, etc +?1 C) quen (C kw'eIN // cinquenta, etc. +?1 A) quen (C kw'eIN // frequência, etc. +?1 quec kes // esquece, etc. +?1 queç kes // esqueça. +?1 A) que (nA_ ke // pequeno, etc. +?1 C) quê (_ ke // porquê, etc. +?1 que (l ke // aquele, etc. +?1 que (r_ kE // qualquer, etc. +?1 qui ki // quinta, esquilo, etc. +?1 _) quind kuind // quindecágono, etc. +?1 tran) qui kui // tranquilo, etc. +?1 _) quo kuo // quoficiente, etc. + + +.group r +?1 _) r (_W 'Err; // within an acronym +?1 _) r (_ 'Err + _) r (_ 'Exe + _) r (_\$ xe'aU // currency + r * + r (_ r + r (C *@- + A) r (A * + A) r (_A * + rr x + XC) r (A R + C) r (A * +//?1 C) r (A r + _) r x + l) r x + n) r (+ x + s) r x +?1 A) r (_ r- // [r-] is English linking-r + + +.group s +?1 _) s (_W Es|; within an acronym [s]+[;] not [s;] phoneme +?1 _) s (_ Es +?2 _) s (_ 'Ese + s s + ss s + sc (Y s + sç s + sh S +?4 _) s (C Is + A) s (A z +?1 @) s (_ s# +?2 s (_ s# + @) s (_A z // next word starts with vowel +?!4 @) s (_G z // next word starts with voiced consonant + + A) s (_S1 s + A) s (_AS1 z // next word starts with vowel + ese) s (_ s +?!4 A) s (_GS1 z // next word starts with voiced consonant + +?1 A) s (C s# +?1 A) ss s +?1 A) s (G+ Z +?1 A) s (_KS1 s# +?1 A) s (_G+S1 Z + + _) sobre (@P5 sob*e + + +.group t + _) t (_ te + t t + t (t +?3 t (B tSI +?3 t (_C t_ +?2 t (i tS +?2 t (í tS +?2 t (e_ tS +?1 th _^_EN +?1 tion (_ _^_EN + + +.group u + _) u (_ u + u u + u (A w + u (_A w + r) u (A u + r) u (_A u + u (A_ 'u + + u (am_ 'u + u (em_ 'u + ui uI + ui (_ 'uI + u (iu w + u (iCK u + uy uI + + um (_ u~N + um (C u~m +?4 um (C u~N + un (K u~N + unh u~n^ + + g) u (Y + + +.group ú + ú ''u + úm (_ ''u~N + úm (C ''u~m +?4 úm (C ''u~N + ún (K ''u~N + únh ''u~n^ + +.group v + v v + v (v +?3 v (B vI +?3 v (_C v_ + + +.group w +?1 _) w (_ d'&bl,iu +?2 _) w (_ d'ablju + w w +?1 w (_ _^_EN +?4 _) w u + + +.group x + x (A S + A) x (A ks + _e) x (A z + _ê) x (A z + _ine) x (A z + e) x (A ks +?1 e) x (CA S + ai) x (A S + ei) x (A S + _au) x s + ou) x (+ S + u) x (i S + x (iqu S + x (C s + xc (Y s + x (s + x (_ ks + x (AxA S + x (ó_ z + a) x (a S + a) x (á S + a) x (ar S + a) x (ei S + xA) x (A S + ale) x (a S + bau) x (A S + brA) x (A S + bY) x (A S + _ca) x (A S + _co) x (A S + _coe) x (A z + _fa) x (i S + _fle) x (a S + gra) x (A S + _he) x (A z + _li) x (A S + _lu) x (A S + _mar) x ks + má) x (im s // máximo, máximas, etc. + me) x (A S + _mé) x (i S + mo) x (a S + _o) x (A S + _o) x (i ks + _o) x (í ks + pi) x (A S + _pro) x (A S + _pra) x (A S + prA) x (i s // aproximado, aproximadamente, aproximar, próximo, etc. + pu) x (A S // verb "puxar" and all its conjugations + qui) x (A S + ri) x (A S + rela) x (A S + _ro) x (A S + _trou) x (e s + _trou) xe (@ sE + _ve) x (A S + _xi) x (A S +?1 i) x (a_ S +?1 i) x (as_ S + _trou) x (ér s + _pro) x (imi s + + +.group y +?1 _) y (_ 'ips,ilON +?2 _) y (_ 'ipsiloN + y i + y (A j + y (_ %i // ?? stress on 1st syllable EN + + +.group z + _) z (_ ze + z z + z (z +?3 z (B zI +?3 z (_C z_ +?1 @) z (_ S +?2 @) z (_ s + @) z (_A z + @) z (_G z + +?1 A) z (C S +?1 A) z (G+ Z +?1 A) z (_C S +?1 A) z (_G+ Z + + +.group + ç s + + ü u + ß s + + $ sifR'&U~ + _r_) $ + + D_) º %o // ordinal + D_) ª %a // ordinal + + + , (D v'irgul& + + + __) - (_D m'enUs + A_) - (_D _ + C_) - (_D _ + diff --git a/dictsource/vi_rules b/dictsource/vi_rules index 6e8db88f..fa8ef8d3 100644 --- a/dictsource/vi_rules +++ b/dictsource/vi_rules @@ -1,740 +1,758 @@ -// replace combining (tone) accents with single characters -.replace -à à -á á -ả ả -ã ã -ạ ạ - - -ằ ằ -ắ ắ -ẳ ẳ -ẵ ẵ -ặ ặ - -ầ ầ -ấ ấ -ẩ ẩ -ẫ ẫ -ậ ậ - -è è -é é -ẻ ẻ -ẽ ẽ -ẹ ẹ - -ề ề -ế ế -ể ể -ễ ễ -ệ ệ - -ì ì -í í -ỉ ỉ -ĩ ĩ -ị ị - -ò ò -ó ó -ỏ ỏ -õ õ -ọ ọ - -ồ ồ -ố ố -ổ ổ -ỗ ỗ -ộ ộ - -ờ ờ -ớ ớ -ở ở -ỡ ỡ -ợ ợ - -ù ù -ú ú -ủ ủ -ũ ũ -ụ ụ - -ừ ừ -ứ ứ -ử ử -ữ ữ -ự ự - -ỳ ỳ -ý ý -ỷ ỷ -ỹ ỹ -ỵ ỵ - - -//================================ -// Consonants -//================================ - -.group b - b b - _) b _b - -.group c - c g //k - c (_ kh - ch c // try [tS;] [tS] [c] - -.group d - d J^ // try [z] [J] [dZ] [dZ;] [J^] - -.group đ - đ d - _) đ _d - -.group f - f f - - -.group g - g Q // try [g] [Q] - gh Q // or [g] [Q] - g (i J^ // try [D] [z] [j] [J^] [z;] [J] [dZ] - g (ì J^ - g (í J^ - g (ỉ J^ - g (ĩ J^ - g (ị J^ - gi J^ - -.group h - h h - - -.group j - j Z - - -.group k - k k - k (_ kh - kh x - -.group l - l l - -.group m - m m - -.group n - n n - ng N - ngh N - nh n^ - -.group ñ - ñ n^ - -.group p - p p - ph f - -.group q - q k - q (_ kh - qu w //kw - -.group r - r z. // try [z] [z.] [r] [z;] - -.group s - s s. // try [s.] [s] [S] - -.group t - t t[ - th t - tr cr // try [cr] [tr] [tS;] [tS] [c] [dZ] [dz;] - -.group v - v v - -.group w - w w - -.group x - x s - -.group z - z z - - -//================================ -// Vowels -//================================ - -.group a - a a: - ai a:I - aì a:I2 - aí a:I3 - aỉ a:I4 - aĩ a:I5 - aị a:I6 - ay aI - aỳ aI2 - aý aI3 - aỷ aI4 - aỹ aI5 - aỵ aI6 - ao a:U - aò a:U2 - aó a:U3 - aỏ a:U4 - aõ a:U5 - aọ a:U6 - au aU - aù aU2 - aú aU3 - aủ aU4 - aũ aU5 - aụ aU6 - -.group à - à a:2 - ài a:I2 - ày aI2 - ào a:U2 - àu aU2 - -.group á - á a:3 - ái a:I3 - áy aI3 - áo a:U3 - áu aU3 - -.group ả - ả a:4 - ải a:I4 - ảy aI4 - ảo a:U4 - ảu aU4 - -.group ã - ã a:5 - ãi a:I5 - ãy aI5 - ão a:U5 - ãu aU5 - -.group ạ - ạ a:6 - ại a:I6 - ạy aI6 - ạo a:U6 - ạu aU6 - -//================================ -.group ă - ă a - -.group ằ - ằ a2 - -.group ắ - ắ a3 - -.group ẳ - ẳ a4 - -.group ẵ - ẵ a5 - -.group ặ - ặ a6 - -//================================= -.group â - â @ - ây @I - âu @U - -.group ầ - ầ @2 - ầy @I2 - ầu @U2 - -.group ấ - ấ @3 - ấy @I3 - ấu @U3 - -.group ẩ - ẩ @4 - ẩy @I4 - ẩu @U4 - -.group ẫ - ẫ @5 - ẫy @I5 - ẫu @U5 - -.group ậ - ậ @6 - ậy @I6 - ậu @U6 - -//=========================== -.group e - e E - eo EU - eò EU2 - eó EU3 - eỏ EU4 - eỗ EU5 - eọ EU6 - -.group è - è E2 - èo EU2 - -.group é - é E3 - éo EU3 - -.group ẻ - ẻ E4 - ẻo EU4 - -.group ẽ - ẽ E5 - ẽo EU5 - -.group ẹ - ẹ E6 - ẹo EU6 - -//============================ - -.group ê - ê e - êu eU - -.group ề - ề e2 - ều eU2 - -.group ế - ế e3 - ếu eU3 - -.group ể - ể e4 - ểu eU4 - -.group ễ - ễ e5 - ễu eU5 - -.group ệ - ệ e6 - ệu eU6 - - -//============================ -.group i - i i - i (A j - ia i@ - ià i@2 - iá i@3 - iả i@4 - iã i@5 - iạ i@6 - iê i@ - iề i@2 - iế i@3 - iể i@4 - iễ i@5 - iệ i@6 - iu iU - iù iU2 - iú iU3 - iủ iU4 - iũ iU5 - iụ iU6 -// iêu i@U - -.group ì - ì i2 - ì (A j2 - ìa i@2 - ìu iU2 - -.group í - í i3 - í (A j3 - ía i@3 - íu iU3 - -.group ỉ - ỉ i4 - ỉ (A j4 - ỉa i@4 - ỉu iU4 - -.group ĩ - ĩ i5 - ĩ (A j5 - ĩa i@5 - ĩu iU5 - -.group ị - ị i6 - ị (A j6 - ịa i@6 - ịu iU6 - - - -//========================= -.group o - o O - oa o@ // modify oa sound example: hoa,khoa // o (A w - oi OI - oì OI2 - oí OI3 - oỉ OI4 - oĩ OI5 - oị OI6 - ong O# - oe o& // Adding oe sound example: lóe sáng,toét mắt -.group ò - ò O2 - òi OI2 - òa o@2 //ò (A w2 - òng O#2 - òe o&2 - -.group ó - ó O3 - ói OI3 - óa o@3 //ó (A w3 - óng O#3 - óe o&3 - -.group ỏ - ỏ O4 - ỏi OI4 - ỏa o@4 //ỏ (A w4 - ỏng O#4 - ỏe o&4 - -.group õ - õ O5 - õi OI5 - õa o@5 //õ (A w5 - õng O#5 - õe o&5 - -.group ọ - ọ O6 - ọi OI6 - ọa o@6 //ọ (A w6 - ọng O#6 - ọe o&6 - - -//============================= -.group ô - ô o - ôi oI - ông o# // ông sound - -.group ồ - ồ o2 - ồi oI2 - ồng o#2 - -.group ố - ố o3 - ối oI3 - ống o#3 - -.group ổ - ổ o4 - ổi oI4 - ổng o#4 - -.group ỗ - ỗ o5 - ỗi oI5 - ỗng o#5 - -.group ộ - ộ o6 - ội oI6 - ộng o#6 - - - -//============================= -.group ơ - ơ @: - ơi @:I - ơu @:U - -.group ờ - ờ @:2 - ời @:I2 - ờu @:U2 - -.group ớ - ớ @:3 - ới @:I3 - ớu @:U3 - -.group ở - ở @:4 - ởi @:I4 - ởu @:U4 - -.group ỡ - ỡ @:5 - ỡi @:I5 - ỡu @:U5 - -.group ợ - ợ @:6 - ợi @:I6 - ợu @:U6 - - - -//============================= -.group u - u u - u (A w - A) u w - ui uI - uì uI2 - uí uI3 - uỉ uI4 - uĩ uI5 - uị uI6 - ua u@ - uà u@2 - uá u@3 - uả u@4 - uã u@5 - uạ u@6 - uô u@ - uồ u@2 - uố u@3 - uổ u@4 - uỗ u@5 - uộ u@6 - uôi u@j - uồi u@j2 - uối u@j3 - uổi u@j4 - uỗi u@j5 - uội u@j6 - //ung u# -.group ù - ù u2 - ù (A w2 - ùi uI2 - ùa u@2 - //ùng u#2 - -.group ú - ú u3 - ú (A w3 - úi uI3 - úa u@3 - //úng u#3 - -.group ủ - ủ u4 - ủ (A w4 - ủi uI4 - ủa u@4 - //ủng u#4 - -.group ũ - ũ u5 - ũ (A w5 - ũi uI5 - ũa u@5 - //ũng u#5 - -.group ụ - ụ u6 - ụ (A w6 - ụi uI6 - ụa u@6 - //ụng u#6 - -//============================= -.group ư - ư y - ưi yI - ưa y@ - ươ y@ - ườ y@2 - ướ y@3 - ưở y@4 - ưỡ y@5 - ượ y@6 - ưu yw - ươi y@j - ười y@j2 - ưới y@j3 - ưởi y@j4 - ưỡi y@j5 - ượi y@j6 - ươu y@w - ườu y@w2 - ướu y@w3 - ưởu y@w4 - ưỡu y@w5 - ượu y@w6 - -.group ừ - ừ y2 - ừi yI2 - ừa y@2 - ừu yw2 - -.group ứ - ứ y3 - ứi yI3 - ứa y@3 - ứu yw3 - -.group ử - ử y4 - ửi yI4 - ửa y@4 - ửu yw4 - -.group ữ - ữ y5 - ữi yI5 - ữa y@5 - ữu yw5 - -.group ự - ự y6 - ựi yI6 - ựa y@6 - ựu yw6 - - - -.group y - y i - y (A j - ya i@ - yà i@2 - yá i@3 - yả i@4 - yã i@5 - yạ i@6 - yê i@ - yề i@2 - yế i@3 - yể i@4 - yễ i@5 - yệ i@6 -// yêu i@U - -.group ỳ - ỳ i2 - ỳ (A j2 - ỳa i@2 - -.group ý - ý i3 - ý (A j3 - ýa i@3 - -.group ỷ - ỷ i4 - ỷ (A j4 - ỷa i@4 - -.group ỹ - ỹ i5 - ỹ (A j5 - ỹa i@5 - -.group ỵ - ỵ i6 - ỵ (A j6 - ỵa i@6 - -.group 0xce // Greek letters -// 0xce is the first byte of the utf-8 code for these characters - - α a:1n_|f'a:1 - ά a:1n_|f'a:1 - β b'e1_|t['a:1 - γ Q'a:1_|m'a:1 - δ J'E1n_|t['a:1 - ε E1p_|s'i1_|l'O1n - έ E1p_|s'i1_|l'O1n - ζ D'e1_|t['a:1 - η e1_|t['a:1 - ή e1_|t['a:1 - θ t'e1_|t['a:1 - ι i1_|'o1_|t['a:1 - ί i1_|'o1_|t['a:1 - κ k'a:1p_|p'a:1 - λ l'a1m_|_d'a:1 - μ mw'i1 - ν nw'i1 - ξ s'i7 - ο o1_|m'i1_|kz.'O7n - -.group 0xcf // Greek letters - - π p'i1 - ρ z.'o1 - σ s'i3c_|m'a:1 - ς s'i3c_|m'a:1 - τ t['o1 - υ u1p_|s'i1_|l'O1n - ύ u1p_|s'i1_|l'O1n - φ f'i1 - χ c'i1 - ψ ps'i1 - ω o1_|m'e1_|Q'a:7 - ώ o1_|m'e1_|Q'a:7 - ό o1_|m'i1_|kz.'O7n - - -.group - % f'@2n||cr'am - ! _:c'@3m_|t'a:7n_: - ! (\! -// : koUl@n - D_) h (_DD_ D'@:2 // omit colon in time, eg: 2:30 - $ d'o||l'a - != x'o#_|_b'a2N_ - >= l'@:3n_|h'@:1n_|hw,a6kh_b'a2N - <= n^'O4_|h'@:1n_|hw,a6kh_b'a2N - - - __) - (_D cr'y2 - A_) - (_D _ - C_) - (_D _ - - - . c'@3m_ - . (. _: - \.) . - +// replace combining (tone) accents with single characters +.replace +à à +á á +ả ả +ã ã +ạ ạ + + +ằ ằ +ắ ắ +ẳ ẳ +ẵ ẵ +ặ ặ + +ầ ầ +ấ ấ +ẩ ẩ +ẫ ẫ +ậ ậ + +è è +é é +ẻ ẻ +ẽ ẽ +ẹ ẹ + +ề ề +ế ế +ể ể +ễ ễ +ệ ệ + +ì ì +í í +ỉ ỉ +ĩ ĩ +ị ị + +ò ò +ó ó +ỏ ỏ +õ õ +ọ ọ + +ồ ồ +ố ố +ổ ổ +ỗ ỗ +ộ ộ + +ờ ờ +ớ ớ +ở ở +ỡ ỡ +ợ ợ + +ù ù +ú ú +ủ ủ +ũ ũ +ụ ụ + +ừ ừ +ứ ứ +ử ử +ữ ữ +ự ự + +ỳ ỳ +ý ý +ỷ ỷ +ỹ ỹ +ỵ ỵ + + +//================================ +// Consonants +//================================ + +.group b + b b + _) b _b + +.group c + c g //k + c (_ kh + ch c // try [tS;] [tS] [c] + + +.group d + d J^ // try [z] [J] [dZ] [dZ;] [J^] + +.group đ + đ d + _) đ _d + +.group f + f f + + +.group g + g Q // try [g] [Q] + gh Q // or [g] [Q] + //g (i J^ // try [D] [z] [j] [J^] [z;] [J] [dZ] + //g (ì J^ + //g (í J^ + //g (ỉ J^ + //g (ĩ J^ + //g (ị J^ + gi J^ +?1 giết J^'iE3g + giết J^'iE3t[ + giếc J^'iE3kh +?1 giệt J^'iE6g + giệt J^'iE6t[ + giệc J^'iE6kh + +.group h + h h + + +.group j + j Z + + +.group k + k k + k (_ kh + kh x + +.group l + l l + +.group m + m m + +.group n + n n +?1 n (_ N //n + ng N + ngh N + nh n^ + +.group ñ + ñ n^ + +.group p + p p + ph f + +.group q + q k + q (_ kh + qu w //kw + +.group r + r z. // try [z] [z.] [r] [z;] + +.group s + s s. // try [s.] [s] [S] + +.group t + t t[ +?1 t (_ g + th t + tr cr // try [cr] [tr] [tS;] [tS] [c] [dZ] [dz;] + +.group v + v v + +.group w + w w + +.group x + x s + +.group z + z z + + + + +//================================ +// Vowels +//================================ + +.group a + a a: + ai a:I + aì a:I2 + aí a:I3 + aỉ a:I4 + aĩ a:I5 + aị a:I6 + ay aI + aỳ aI2 + aý aI3 + aỷ aI4 + aỹ aI5 + aỵ aI6 + ao a:U + aò a:U2 + aó a:U3 + aỏ a:U4 + aõ a:U5 + aọ a:U6 + au aU + aù aU2 + aú aU3 + aủ aU4 + aũ aU5 + aụ aU6 + +.group à + à a:2 + ài a:I2 + ày aI2 + ào a:U2 + àu aU2 + +.group á + á a:3 + ái a:I3 + áy aI3 + áo a:U3 + áu aU3 + +.group ả + ả a:4 + ải a:I4 + ảy aI4 + ảo a:U4 + ảu aU4 + +.group ã + ã a:5 + ãi a:I5 + ãy aI5 + ão a:U5 + ãu aU5 + +.group ạ + ạ a:6 + ại a:I6 + ạy aI6 + ạo a:U6 + ạu aU6 + +//================================ +.group ă + ă a + +.group ằ + ằ a2 + +.group ắ + ắ a3 + +.group ẳ + ẳ a4 + +.group ẵ + ẵ a5 + +.group ặ + ặ a6 + +//================================= +.group â + â @ + ây @I + âu @U1 + +.group ầ + ầ @2 + ầy @I2 + ầu @U2 + +.group ấ + ấ @3 + ấy @I3 + ấu @U3 + +.group ẩ + ẩ @4 + ẩy @I4 + ẩu @U4 + +.group ẫ + ẫ @5 + ẫy @I5 + ẫu @U5 + +.group ậ + ậ @6 + ậy @I6 + ậu @U6 + +//=========================== +.group e + e E + eo EU + eò EU2 + eó EU3 + eỏ EU4 + eỗ EU5 + eọ EU6 + +.group è + è E2 + èo EU2 + +.group é + é E3 + éo EU3 + +.group ẻ + ẻ E4 + ẻo EU4 + +.group ẽ + ẽ E5 + ẽo EU5 + +.group ẹ + ẹ E6 + ẹo EU6 + +//============================ + +.group ê + ê e + êu eU1 + +.group ề + ề e2 + ều eU2 + +.group ế + ế e3 + ếu eU3 + +.group ể + ể e4 + ểu eU4 + +.group ễ + ễ e5 + ễu eU5 + +.group ệ + ệ e6 + ệu eU6 + + + +//============================ +.group i + i i + i (A j + ia i@ + ià i@2 + iá i@3 + iả i@4 + iã i@5 + iạ i@6 + iê iE + iề iE2 + iế iE3 + iể iE4 + iễ iE5 + iệ iE6 + iu iU + iù iU2 + iú iU3 + iủ iU4 + iũ iU5 + iụ iU6 + iêu iU + iều iU2 + iếu iU3 + iểu iU4 + iễu iU5 + iệu iU6 + +.group ì + ì i2 + ì (A j2 + ìa i@2 + ìu iU2 + +.group í + í i3 + í (A j3 + ía i@3 + íu iU3 + +.group ỉ + ỉ i4 + ỉ (A j4 + ỉa i@4 + ỉu iU4 + +.group ĩ + ĩ i5 + ĩ (A j5 + ĩa i@5 + ĩu iU5 + +.group ị + ị i6 + ị (A j6 + ịa i@6 + ịu iU6 + + + +//========================= +.group o + o O + oa o@ // modify oa sound example: hoa,khoa // o (A w + oi OI + oì OI2 + oí OI3 + oỉ OI4 + oĩ OI5 + oị OI6 + ong O# + oe o& // Adding oe sound example: lóe sáng,toét mắt + +.group ò + ò O2 + òi OI2 + òa o@2 //ò (A w2 + òng O#2 + òe o&2 + +.group ó + ó O3 + ói OI3 + óa o@3 //ó (A w3 + óng O#3 + óe o&3 + +.group ỏ + ỏ O4 + ỏi OI4 + ỏa o@4 //ỏ (A w4 + ỏng O#4 + ỏe o&4 + +.group õ + õ O5 + õi OI5 + õa o@5 //õ (A w5 + õng O#5 + õe o&5 + +.group ọ + ọ O6 + ọi OI6 + ọa o@6 //ọ (A w6 + ọng O#6 + ọe o&6 + + +//============================= +.group ô + ô o + ôi oI + ông o# // ông sound + +.group ồ + ồ o2 + ồi oI2 + ồng o#2 + +.group ố + ố o3 + ối oI3 + ống o#3 + +.group ổ + ổ o4 + ổi oI4 + ổng o#4 + +.group ỗ + ỗ o5 + ỗi oI5 + ỗng o#5 + +.group ộ + ộ o6 + ội oI6 + ộng o#6 + + + +//============================= +.group ơ + ơ @: + ơi @:I + ơu @:U + +.group ờ + ờ @:2 + ời @:I2 + ờu @:U2 + +.group ớ + ớ @:3 + ới @:I3 + ớu @:U3 + +.group ở + ở @:4 + ởi @:I4 + ởu @:U4 + +.group ỡ + ỡ @:5 + ỡi @:I5 + ỡu @:U5 + +.group ợ + ợ @:6 + ợi @:I6 + ợu @:U6 + + + +//============================= +.group u + u u + u (A w + A) u w + ui uI + uì uI2 + uí uI3 + uỉ uI4 + uĩ uI5 + uị uI6 + ua u@ + uà u@2 + uá u@3 + uả u@4 + uã u@5 + uạ u@6 + uô u@ + uồ u@2 + uố u@3 + uổ u@4 + uỗ u@5 + uộ u@6 + uôi u@j + uồi u@j2 + uối u@j3 + uổi u@j4 + uỗi u@j5 + uội u@j6 + //ung u# +.group ù + ù u2 + ù (A w2 + ùi uI2 + ùa u@2 + //ùng u#2 + +.group ú + ú u3 + ú (A w3 + úi uI3 + úa u@3 + //úng u#3 + +.group ủ + ủ u4 + ủ (A w4 + ủi uI4 + ủa u@4 + //ủng u#4 + +.group ũ + ũ u5 + ũ (A w5 + ũi uI5 + ũa u@5 + //ũng u#5 + +.group ụ + ụ u6 + ụ (A w6 + ụi uI6 + ụa u@6 + //ụng u#6 + +//============================= +.group ư + ư y + ưi yI + ưa y@ + ươ y@ + ườ y@2 + ướ y@3 + ưở y@4 + ưỡ y@5 + ượ y@6 + ưu yw + ươi y@j + ười y@j2 + ưới y@j3 + ưởi y@j4 + ưỡi y@j5 + ượi y@j6 + ươu y@w + ườu y@w2 + ướu y@w3 + ưởu y@w4 + ưỡu y@w5 + ượu y@w6 + +.group ừ + ừ y2 + ừi yI2 + ừa y@2 + ừu yw2 + +.group ứ + ứ y3 + ứi yI3 + ứa y@3 + ứu yw3 + +.group ử + ử y4 + ửi yI4 + ửa y@4 + ửu yw4 + +.group ữ + ữ y5 + ữi yI5 + ữa y@5 + ữu yw5 + +.group ự + ự y6 + ựi yI6 + ựa y@6 + ựu yw6 + + + +.group y + y i + y (A j + ya i@ + yà i@2 + yá i@3 + yả i@4 + yã i@5 + yạ i@6 + yê i@ + yề i@2 + yế i@3 + yể i@4 + yễ i@5 + yệ i@6 + // yêu i@U + +.group ỳ + ỳ i2 + ỳ (A j2 + ỳa i@2 + +.group ý + ý i3 + ý (A j3 + ýa i@3 + +.group ỷ + ỷ i4 + ỷ (A j4 + ỷa i@4 + +.group ỹ + ỹ i5 + ỹ (A j5 + ỹa i@5 + +.group ỵ + ỵ i6 + ỵ (A j6 + ỵa i@6 + +.group 0xce // Greek letters +// 0xce is the first byte of the utf-8 code for these characters + + α a:1n_|f'a:1 + ά a:1n_|f'a:1 + β b'e1_|t['a:1 + γ Q'a:1_|m'a:1 + δ J'E1n_|t['a:1 + ε E1p_|s'i1_|l'O1n + έ E1p_|s'i1_|l'O1n + ζ D'e1_|t['a:1 + η e1_|t['a:1 + ή e1_|t['a:1 + θ t'e1_|t['a:1 + ι i1_|'o1_|t['a:1 + ί i1_|'o1_|t['a:1 + κ k'a:1p_|p'a:1 + λ l'a1m_|_d'a:1 + μ mw'i1 + ν nw'i1 + ξ s'i7 + ο o1_|m'i1_|kz.'O7n + +.group 0xcf // Greek letters + + π p'i1 + ρ z.'o1 + σ s'i3c_|m'a:1 + ς s'i3c_|m'a:1 + τ t['o1 + υ u1p_|s'i1_|l'O1n + ύ u1p_|s'i1_|l'O1n + φ f'i1 + χ c'i1 + ψ ps'i1 + ω o1_|m'e1_|Q'a:7 + ώ o1_|m'e1_|Q'a:7 + ό o1_|m'i1_|kz.'O7n + + +.group + % f'@2n||cr'am + ! _:c'@3m_|t'a:7n_: + ! (\! +// : koUl@n + D_) h (_DD_ D'@:2 // omit colon in time, eg: 2:30 + $ d'o||l'a + != x'o#_|_b'a2N_ + >= l'@:3n_|h'@:1n_|hw,a6kh_b'a2N + <= n^'O4_|h'@:1n_|hw,a6kh_b'a2N + + + __) - (_D cr'y2 + A_) - (_D _ + C_) - (_D _ + + + . c'@3m_ + . (. _: + \.) . + diff --git a/espeak-data/voices/en/en-us b/espeak-data/voices/en/en-us index 7673b3bc..fd86703c 100755 --- a/espeak-data/voices/en/en-us +++ b/espeak-data/voices/en/en-us @@ -14,4 +14,4 @@ stressAmp 17 16 19 19 19 19 21 19 replace 03 I i replace 03 I2 i -replace 03 @ @/ + diff --git a/phsource/compile_report b/phsource/compile_report index b4ca41db..6d6a60cb 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -6,7 +6,7 @@ consonants 10 118 base2 26 125 en 54 156 en-n 33 156 - en-us 40 157 + en-us 39 156 en-sc 41 158 en-rp 34 156 en-wm 31 156 @@ -44,15 +44,15 @@ consonants 10 118 es-la 1 125 ca 11 127 an 4 125 - pt 30 141 - pt-pt 20 141 + pt 29 140 + pt-pt 20 140 ro 36 148 el 10 125 grc 12 129 sv 22 129 no 28 134 is 42 141 - vi 52 146 + vi 53 147 zhy 41 138 zh 64 155 sw 9 110 @@ -421,7 +421,7 @@ l/l_ [l] base [l/] fr l/l_@ [l/3] base [l/] fr -l/l@ [hFp] base +l/l@ [L¸j] base [l#] base [l] fr [l/2] fr @@ -455,7 +455,7 @@ l/L2_oL [l/2] base l/L2_uL [l/2] base l/l_3 [l/] de l/l_4 [ll] sq -l/la [hFp] base +l/la [L¸j] base [l#] base [l] fr [l/2] fr @@ -463,7 +463,7 @@ l/la [hFp] base [K] tn l/l_a [l/3] base [l/] fr -l/le [hFp] base +l/le [L¸j] base [l#] base [l] fr [l/2] fr @@ -475,7 +475,7 @@ l/L_eL_af [&] af [&:] af l/l_front [L] sq l/l_front_ [l/4] sq -l/li [hFp] base +l/li [L¸j] base [l#] base [l] fr [l/2] fr @@ -489,7 +489,7 @@ ll/ll [L] base ll/_ll [L] base l/l_long [l] base [l] fr -l/lo [hFp] base +l/lo [L¸j] base [l#] base [l/2] fr [K] nso @@ -500,7 +500,7 @@ l^/l_rfx [l.] base [l;] lt [l] ru [l^] ru -l/lu [hFp] base +l/lu [L¸j] base [l#] base [l] fr [l/2] fr @@ -551,7 +551,6 @@ n/_n [n] base [n] zh n/n_ [n] base n/n@ [n] base - [n.] base [n] fr [n#] is [n] zh @@ -561,7 +560,6 @@ n^/n^a [n^] base [n;] lt [n#] ru n/na [n] base - [n.] base [n] fr [n#] is [n] zh @@ -569,7 +567,6 @@ n^/n^e [n^] base [n;] lt [n#] ru n/ne [n] base - [n.] base [n] fr [n#] is [n] zh @@ -577,7 +574,6 @@ n^/n^i [n^] base [n;] lt [n#] ru n/ni [n] base - [n.] base [n] fr [n#] is [n] zh @@ -617,18 +613,22 @@ n^/n^o [n^] base [n;] lt [n#] ru n/no [n] base - [n.] base [n] fr [n#] is [n] zh n/_nr [n.] base n/nr_ [n.] base +n/nr@ [n.] base +n/nra [n.] base +n/nre [n.] base +n/nri [n.] base +n/nro [n.] base +n/nru [n.] base n/n-syl [n-] base n^/n^u [n^] base [n;] lt [n#] ru n/nu [n] base - [n.] base [n] fr [n#] is [n] zh @@ -1345,6 +1345,7 @@ vietnam/a [a:] vi vietnam/_c [kh] vi vietnam/ch [c] vi vietnam/dd [d] vi +vietnam/ie_2 [iE] vi vietnam/oe [o&] vi vietnam/th [t] vi vietnam/tr [cr] vi @@ -1367,6 +1368,7 @@ vnasal/e_n [e~] af [e~] hi [e~] pt vnasal/ii_n [I~] hi + [i] vi vnasal/i_n [i~] pt vnasal/i_n2 [i~] hi vnasal/oi_n [oI~] pt @@ -1389,7 +1391,7 @@ vnasal/u_n [U~] hi vnasal/V_n [V~] hi vnasal/W_n [E~] fr [W~] fr - [&2~] pt + [&~] pt [E~] ht voc/bh [B] base voc/dh [D] base @@ -1537,6 +1539,7 @@ vowel/@_4 [@] en-us [@] nl [@] no vowel/@_6 [@] en + [@] en-us [W] fr [W2] fr vowel/8 [o-] zh @@ -2071,8 +2074,7 @@ vowel/@_low [@] en-rp [@] pa [V] pa [@] si -vowel/@_low2 [@/] en-us - [@2] en-us +vowel/@_low2 [@2] en-us vowel/o [o] base2 [o:] en [oU] en-n @@ -2482,52 +2484,52 @@ vwl_en_us/oor [O:] en-us vwl_en_us/or [o@] en-us [O:] en-sc vwl_en_us/ur [U@] en-us -vwl_fr/@2r [] fr -vwl_fr/a2r [] fr -vwl_fr/aa2r [] fr +vwl_fr/@2r [L¸j] fr +vwl_fr/a2r [L¸j] fr +vwl_fr/aa2r [L¸j] fr vwl_fr/br [r/2] fr -vwl_fr/e2r [] fr -vwl_fr/e_2r [] fr -vwl_fr/ee2r [] fr -vwl_fr/i2r [] fr +vwl_fr/e2r [L¸j] fr +vwl_fr/e_2r [L¸j] fr +vwl_fr/ee2r [L¸j] fr +vwl_fr/i2r [L¸j] fr vwl_fr/j [j/] fr vwl_fr/lo [l] fr -vwl_fr/o2r [] fr -vwl_fr/oo2r [] fr +vwl_fr/o2r [L¸j] fr +vwl_fr/oo2r [L¸j] fr vwl_fr/r [r] fr [r/2] fr vwl_fr/r_ [r/] fr vwl_fr/r_@ [r/] fr -vwl_fr/r@ [] fr +vwl_fr/r@ [L¸j] fr vwl_fr/@R [x] pt-pt -vwl_fr/r@2 [] fr +vwl_fr/r@2 [L¸j] fr vwl_fr/@R2 [R] fr-ca -vwl_fr/ra [] fr +vwl_fr/ra [L¸j] fr vwl_fr/r_a [r/] fr -vwl_fr/raa [] fr -vwl_fr/re [] fr +vwl_fr/raa [L¸j] fr +vwl_fr/re [L¸j] fr vwl_fr/r_e [r/] fr -vwl_fr/re2 [] fr -vwl_fr/ree [] fr -vwl_fr/ri [] fr +vwl_fr/re2 [L¸j] fr +vwl_fr/ree [L¸j] fr +vwl_fr/ri [L¸j] fr vwl_fr/r_i [r/] fr -vwl_fr/rj [] fr +vwl_fr/rj [L¸j] fr vwl_fr/r_n [r/] fr -vwl_fr/ro [] fr +vwl_fr/ro [L¸j] fr vwl_fr/r_o [r/] fr -vwl_fr/roo [] fr +vwl_fr/roo [L¸j] fr vwl_fr/rr [r/] fr -vwl_fr/ru [] fr +vwl_fr/ru [L¸j] fr vwl_fr/r_u [r/] fr -vwl_fr/rw [] fr -vwl_fr/ry [] fr +vwl_fr/rw [L¸j] fr +vwl_fr/ry [L¸j] fr vwl_fr/r_y [r/] fr vwl_fr/tr [r/2] fr vwl_fr/trr [r/] fr -vwl_fr/u2r [] fr +vwl_fr/u2r [L¸j] fr vwl_fr/wa [w] fr [w/] fr -vwl_fr/y2r [] fr +vwl_fr/y2r [L¸j] fr vwl_hi/l-voc [l-] base [l] lt [l-] sk diff --git a/phsource/n/nri b/phsource/n/nri index e2188db156e2c2ddd866ca210a5606cdf4b1e9ee..0a086bc1239958be844e9e454679dc1279ea357b 100644 GIT binary patch delta 238 zcmaFL^OR?TF5{Modd^Hc*e3sHRApq{IMbOihxY+v1w$kQ0~j+fOkg~~{((V;DGDe8 z!VC;N><(-hj7u1MfNT(EV0gpX!193c0V4||0|N*%FmUiNpomm$U&D*8hC%wks`swFYJ=pya>4SdLIY&jaF9VQpCeg*(P C*DhHA delta 152 zcmaFL^OR?TF5`!Zdd^H0tP_h>8Cf>YbY`3wpa|jevpisYz{tYLzyQKk+b1qh*gTo3 zg(*5iXbIyI#wZ2`1`uXoNaTH)Grn1MlrYnvFdW(I~BUUZRm{!M(yYHT?g Lq_ZX$v3>>sSLPxJ diff --git a/phsource/n/nro b/phsource/n/nro index 9b503c3affb62c89f78972c8c0a8fbcddc408861..1b0e68853b8ac3acb800f6f0271ab93d9f59f7c9 100644 GIT binary patch delta 171 zcmdnVvy*3nF5`)fdUqKaZ8q~TIWsb^VPKdX#GK0Xg?sZ(W*f$O2Z0BS8H|w(3=AO5 z!0>>vK}?770b>-94Z;izo0tzsL@+I3>;bYtn1SI9=K-Lu2aGI?3=AO5z`()NAdD=s m{{KB*23}+l28ISn2NsaX7oZLhW?-n0W0?Gb*>dt))*b-5&nJce delta 171 zcmdnVvy*3nF5{MsdUqKo7EYVIkZB$Bs=8m3gP2p9WOz33WVT_fuM&8`n86syz`y{) z3=9t#w~6U6K46RjvO$=EVH5KQi3p}8j6Fa$2s1Fe;XDS^^?;Fuk%0k(85lTtW(XsT ntp9(HSAZ8;gn^+!vV;XB@&%{^gc%qr$Jo>MG!Ss!yhxzgg>T1jIr@0@efQCi5VL@Ki}uvyL;}r+BIw; za`K$>oZorQVf}ue@9+D2p1Wh)`n5ZEY){6`?CyK78>+Xf=!O6Dy;FOFdq4iI^n+|{ z9g&ZvqqqHbr;W!SjXhbgn~0j(o&u}g6>EvJL~-sIzsU*}d6zfT%nq~~-wj8)=XHi6!y4rN>&|q}T|a40*>QW& z*4r|>+&*HPY{1sq7JG=clw*kN3LCX~)?YY?- z_k*wO8g~v>V z`we!~p0LMl1DJ2MUAE1(+m*JDnQ;@S51Vh-*a2HkbQxnt?OMAL+=uKk`#9GX@ZrNq zA859MV~sWQz`oj2?>+ongG1W)-rnOn zp;I=tfoKMMV+QDNjbi_5>|_Z0#UBX!HF?^^(mHgdn(_R`Dgdk#VoF1rni7* z9mtk4!-JVG1=LuFwK2MmKcXIn8aY?-W-V%H;Yhvr^WU6wc>CTTCtW9W%EmSlJsk&|1W9yjLJ{)|;#w=w?kiOX-aQ!}83=1P* zelr>wgOBS_LK2+&$v)knSVvQ?DYH0pz6w+;nb$>*gJQ1b+&3_)*mBWa5s%7Sj zgE`{h^yhz_;o#3lL-4zP9OW!Gikhk@4Jrq@uNYQNXlZibAry5#f`_6HYOdRrFtq(guGI27or#9*U-IckK{S|*H&y7sX zdNZy_Hs2p;4g0MAsnd7fZT2u(=xc87FGmAoV7wBPKVe^GwqHuFS#Nvn({=~mkVFOj zxb6lRx}H(%c($7ni@?9b<#wSc%uAf#R&bUsl;s1L6(bFB(C8ScgOy5-8t|{-EuG~H zvtc52`i;N7?oju=w9F^`H`@Xd{P>BW zgCa7qEkv?R>@q6~D?+vCk;ch_tRf2SfM+#fMVK8+9I45j?T5>9=l=jqT#}=R0hrk4 zT|7l>w%f=`&%#3&vweizvkYWY%=W!xqpf(vTC}jA+H@JX_mY7Y^L(SJBJG2PwNyva zL?_je{8m}1%%LwIPJpTAdNCUDxav^0k^{_z1NG$2atpb54NXTaN1dh4eCZ$i9rC{S zt26`IOE$JOhl_lNxR&}foSn=n^Bm$>o+`%6a#dj#RfV_+#$>Y7K;lANdKch;mThPW*_*sP;--9oY!o_^txF4TbOXga_v!!U`62{L1M`0^3sB+mU z0V9DTRHYVks9q{&gxHvw=B^SZD!JF&bud$#{(`brIcz-Lus6-d8(A9CJ>Sd3wx5TM z-Fa-h=S5cw`E1-8Wg``3!z{{%Tcv&AiggS}cmls(;p(B~u(90bsdcOh?q>e3LkoPy=XV1vn?EP*7DMsObm^>$`< zH=L{_U&+lo7_Dlz4Nh9XumM$wl_FG8u9=M04{A?Ry#DI7bQ&l8IeDB`aoIBdnPHEW(N$#N7POdik!1PL||(d4ATq zFrAFrt?XxflPuMRD!Q2OefYs5xY~eGS=7qxUg1WZSayLo2_=<-o@xu zjGPa`wIHjNT|Awmf_x=Dl*3eODSypiOf{;~>UtjElP2nEs(gbLpcqj#mRS|D=05Yg z)E^ubzW38TSx$mpHg+X}|E(9Zjd{#GeO_h;5>aOI{lxMz*x9pDy_`Ke{WbRpdie_6 zY$um@!AKA2&!_dHm7DR4T0Er5xyU9ovlhL~MKP^#GY`H7ag(`l*Y4g}0nW4ej_N1v zaEOi4w5MxtNxMrPXRX3#z<``z=$E22Rb=HZrngjQ$x&1#mvS%N#ptEZymM8jqr&%o z><64=&)L{+f>W`xK98O8^Ri>ME~1Nu$0^t}T29WvYd5B*E-Ze+0^9CaOfj|81i>}n#{rK84QIUYX} zS}j^?Tfs!#zeBaLrQVK@S1}1fP?B&FG#bnNY;T2^QrMZ!NDkdU(xo^!H&s!~8 zXjfKW?w+?K6q#zjFhyD`74K-3F3kixR?dVCk{5f6^ZcBj2BNozN*8yN2jgIvUQ?QTH@-v^b)p>14SJ)6pO+_Rq0* zI08d+;AB461!!Wxt>?8;mp@2h9q4NWmnnfGt=v`Tw!mjUUepYeb6hU$1??ix7S6&} z^?`6zUdwop)-mdf!$4Q6u1nk(XYzgp{AjOBn$mYvKg+iQ_wwk^fTt%r;*J^LJMM=l zio~wvekz`Z@_70?pN+0GEm9|Z_&g=4(mqQ?FhX9_?3GTmuGeoM`pu&T?KE3+Kl7itIp zR?Z8kqL=f#$rh(9{kAcaLpvy~JX0Os?&<^m-ZYn|+C%P!zu7eH@+@LpGiU}YQSmjy z@gq$X(-RM+jwe+QdMd_LW2i>Z?o1v01X?WT|EisaU`MTnad8g4AuX1`)=Td^;P~;q z7ehP+-E8do^RTrrkF5jKV5{Xr&w$Fi0d<@guM_)Tb0qoRcgM4A1-)$SMgrT;J-*GX@Nn$Wn5uX+s+59YU-T;aYG#|`R?!nX z9I6I?n3%||^iqvw6S=?9rw&$(Cnj?$#&>7gG^)W>)2s%QtX~gM*DgdMv%yNMq#jmM zNw}+r2UTO$AQSBFNQZN2!OBNZ>KG+`bum(_T-EW)kiovQloC`GL9H&f)YD#s@}SNM k$AGYpajzAZe$UaqsTd7bT~%(h*wX4Nm@~ delta 2453 zcmb`JNoW&M9LB$yCgmC9BwDw$X&Vi;DQcHVs7sYp+qi>~MyUuAJQZ!MVAa%1BM6Fk zk%>?}NL?;!t%71jL5iq&@F3Vjae*8>^q`_5rGhlR%=qTL=#<*xAKx7 zMng(VG}07niR`ceIO0F2tnN;{jp4NIjC@g|M~F-AqE^`}=kz^0TwXb&pAV5D-1wfX9$~hsD5kmBO{JnCoO2*8#twwUqq0?N8VPc}R!V{sU~i0K;Uk zp9O<|!TRJoI&8@lVHpp1W9jU;{ptSB1Alt!mCx$9;z@BG2loix1}DRf7e4Qf;f4K@ z+)n{2iA!Viy>hO0DmiO^Fwdx(N`^?hh*vG(V!BfqnZ@*=XV}KHRp&%;64!Aa^=QOO zG-CrcVl}pF7s%be^4qG%Pyo^JAmO=7JDFBVr)gLvlNxq7UUs(vg@)nWsPrtzNIAm= zNZK)nwP_#enZwMaoy=sA!Z!Uj9Hg+QoxNjacpDOUh^weWC2Ft+tLVrC5!P>C?ry9ooHm@t6DfL7C4ozOR88m*nJ zLp$Aj*U&&qSx$cySdMB`YoBI66AS}egcvSc#thYA~lUCvK4 znLesy&AaA}=a#S;>V!MR(Au5(BYCB45S#@ja8_$Nn<$Oe&O(Ue6pqt*Tue*p#}fLi zLXDPK_&P7U^+F6^=}pTw1DiNtx-n?up3ix(Istb3f5UE+e96o1G69yH0Op-$b_4X2 z;1~`f1RvZefftJqKuGH-eV=EzQi!2`N->C=K^1mhkeGwwC?9Q0(2bs!&*(kcDDlM} rx52ekPV487$UD}f;RVib>>DWDrQ9d1kH32yLhr5>de_j}W8d>%-tqPI diff --git a/phsource/vowel/oe b/phsource/vowel/oe index ef6388b8e26568d7b7bd1ea7e7fed3e917e63c9b..c27427bf4b9928960c876a1be87e708a2c4f35ce 100644 GIT binary patch delta 1047 zcmb`FJxc>Y5Qb;x?#vQhbD*e1O%n(Kt%51k!cz$tMNwjr1Vr%z6hs>f8xtErB#ord zLTvm2A|f^cQ|2F}4JejD@Cwls&gD$Zts;mn3_CpR-p<2&C*DG@9-EDf&&TFMDgbP+ zEryT9P?}mOP?fQa3EC4-WXn_lCNo)*ND^MuTPlD61~5Y;1DvlT=QdI4tjf5kPyxg- zjy6f@gP76*a+v!dbQMgmP0Z>GFhXe8=Rib){zfuv-K(x(t*P%BB+SP9dm4R}T@};nB5$r+iv_R`8Intl;ur=@gB-YDI z-FeL-P6zsM9nqnnKhQvaa=4Bv9mq1-C9V4#l?vOGRD9Zjq%y$Im{a9aoHM6NLf2JU zWtx9c8Hi9E4TD?0zfif?+A(b?Pu4YBhVp7R0F?Jstp{gXE?kuq`?M`dag9`DDjhc|tbmB1BAWbBK`IG>P2jzw4!x$(R)IjevF?Jhc- F@f`~tzu5o) delta 700 zcmX>hJ6(!5IKb68B-k~Ok%56Be4>C={RtrB9n(9e>x@YZ*MXv67{4(7VA;;_gN1=X zjY*A(gChfop={nij2yfS3=vEbOmza5K+M3fhiMNJ&*2+ZT2Tj(VHr8Ks%(OBe#U<}ryezhlf};AOfY9KrN}QGj&@g9fXB zgba}Vj6IWS2FDEE2aFFGQ+Pd@p72=kf!JLFpP4%NK5&89AV(xfpJ0WtE9BIGIw9g3 z$`JM;qY`5W(<1Xw%N8ps>rK|8w)5>jIr(qqXZg>_xMeawn>5@he;9M%PLX46g*(NB zV-6$CDeHOXF~Xb@DImataEdPn!YL-M*qkD7c)~ErSiqFs?7r!36Il}v(+?Jmc4C|V zv;AdcwtwC*`8_wnG3-n!aK~t~=D{7~$l(Qd%w%2%xMTM7Uq=cTKP1O6Fko}c51mE2 z_WFMeM2vKeRvTV2R5aOY;cho&^LtKFrur06$TE}wF(`_7nUaA{0i}Tlj80&uFff3k z$eF_f=oAJ9P>@gLH3d2a!rsdNo3Vor!Uma>AdO&y(g`ApAnYYtZQ6A}#~jda*E^?e MqRFuNCeM3D0OAq3LjV8( diff --git a/platforms/big_endian/espeak-phoneme-data.c b/platforms/big_endian/espeak-phoneme-data.c index 8d7ca32f..847ff358 100644 --- a/platforms/big_endian/espeak-phoneme-data.c +++ b/platforms/big_endian/espeak-phoneme-data.c @@ -1,5 +1,5 @@ - +// 20.02.13 Add samplerate 4-bytes at start of phondata // 14.09.10 Recognize long and short frames in phondata // 02.09.10 Fix: Q sections were omitted from the converted phondata // 13.08.10 jonsd: Added Q lines. Use Address to set the displacement in phondata file. @@ -235,7 +235,9 @@ void swap_phondata (const char *infile, const char *outfile, exit (1); } - xread = fread(buf_4, 4, 1, in); + xread = fread(buf_4, 4, 1, in); // version number + fwrite(buf_4, 4, 1, out); + xread = fread(buf_4, 4, 1, in); // sample rate fwrite(buf_4, 4, 1, out); while (fgets (line, sizeof(line), mfest)) diff --git a/platforms/windows/espeakedit/src/speech.h b/platforms/windows/espeakedit/src/speech.h index 04d0e0bf..a004b157 100755 --- a/platforms/windows/espeakedit/src/speech.h +++ b/platforms/windows/espeakedit/src/speech.h @@ -29,6 +29,7 @@ #define INCLUDE_KLATT #define INCLUDE_MBROLA #define INCLUDE_SONIC +#define _ESPEAKEDIT #include #define PLATFORM_WINDOWS diff --git a/platforms/windows/espeakedit/src_copy/speech.h b/platforms/windows/espeakedit/src_copy/speech.h index 04d0e0bf..a004b157 100755 --- a/platforms/windows/espeakedit/src_copy/speech.h +++ b/platforms/windows/espeakedit/src_copy/speech.h @@ -29,6 +29,7 @@ #define INCLUDE_KLATT #define INCLUDE_MBROLA #define INCLUDE_SONIC +#define _ESPEAKEDIT #include #define PLATFORM_WINDOWS diff --git a/src/compiledata.cpp b/src/compiledata.cpp index d3312a11..4e83fa7a 100644 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -27,6 +27,7 @@ #include "wx/wfstream.h" #include "wx/dir.h" #include "wx/filename.h" +#include #include "speak_lib.h" #include "main.h" @@ -45,6 +46,7 @@ extern void FindPhonemesUsed(void); extern void DisplayErrorFile(const char *fname); extern int utf8_out(unsigned int c, char *buf); extern void DrawEnvelopes(); +extern void ReadPhondataManifest(); char path_source[sizeof(path_home)+20]; @@ -465,7 +467,7 @@ return; instn_category = (instn >> 12) & 0xf; data1 = instn & 0xff; type2 = (instn >> 8) & 0xf; - fprintf(f_out, " %.3x: %.4x %s",pc-prog_buf,instn,instn_category_string[instn_category]); + fprintf(f_out, " %.3x: %.4x %s",(unsigned int)(pc-prog_buf),instn,instn_category_string[instn_category]); switch(instn_category) { @@ -644,6 +646,7 @@ static int duplicate_references = 0; static int count_frames = 0; static int error_count = 0; static int resample_count = 0; +static int resample_fails = 0; static int then_count = 0; static int after_if = 0; @@ -738,7 +741,6 @@ static void CompileReport(void) const char *data_path; int prev_table; int prev_mnemonic; - char fname[sizeof(path_source)+20]; if(f_report == NULL) return; @@ -1791,8 +1793,12 @@ static int LoadWavefile(FILE *f, const char *fname) int max = 0; int length; int sr1, sr2; + int failed; + int len; int resample_wav = 0; + const char *fname2; char fname_temp[100]; + char msg[120]; int scale_factor=0; fseek(f,24,SEEK_SET); @@ -1802,53 +1808,67 @@ static int LoadWavefile(FILE *f, const char *fname) if((sr1 != samplerate_native) || (sr2 != sr1*2)) { -#ifdef PLATFORM_WINDOWS - if(sr1 != samplerate_native) + int fd_temp; + char command[sizeof(path_source)+200]; + + failed = 0; + +#ifdef PLATFORM_POSIX + strcpy(fname_temp,"/tmp/espeakXXXXXX"); + if((fd_temp = mkstemp(fname_temp)) >= 0) { - fprintf(f_errors,"Wrong samplerate %d, wants %d\n",sr1,samplerate_native); - error("Wrong samplerate: %s",fname); - } - if(sr2 != sr1*2) - { - error("Not mono: %s",fname); + close(fd_temp); } #else - { - int fd_temp; - char command[sizeof(path_source)+200]; - strcpy(fname_temp,"/tmp/espeakXXXXXX"); - if((fd_temp = mkstemp(fname_temp)) >= 0) - { - close(fd_temp); - sprintf(command,"sox \"%s%s.wav\" -c1 -t wav %s rate -h %d\n",path_source,fname,fname_temp,samplerate_native); - if(system(command) < 0) - { - error("Failed to resample: %s",command); - remove(fname_temp); - return(0); - } - } - - if(GetFileLength(fname_temp) <= 0) - { - error("Failed to resample: %s",command); - remove(fname_temp); - return(0); - } - - f = fopen(fname_temp,"rb"); - if(f == NULL) - { - error("Can't read temp file: %s",fname_temp); - return(0); - } - if(f_report != NULL) - fprintf(f_report, "resampled %s\n", fname); - resample_count++; - resample_wav = 1; - fseek(f,40,SEEK_SET); // skip past the WAV header, up to before "data length" - } + strcpy(fname_temp,tmpnam(NULL)); #endif + + fname2 = fname; + len = strlen(fname); + if(strcmp(&fname[len-4], ".wav") == 0) + { + strcpy(msg, fname); + msg[len-4] = 0; + fname2 = msg; + } + + sprintf(command,"sox \"%s%s.wav\" -r %d -c1 -t wav %s\n",path_source,fname2,samplerate_native, fname_temp); + if(system(command) < 0) + { + failed = 1; + } + + + if(failed || (GetFileLength(fname_temp) <= 0)) + { + if(resample_fails < 2) + error("Resample command failed: %s", command); + resample_fails++; + + if(sr1 != samplerate_native) + { + sprintf(msg, "Can't resample (%d to %d): %s", sr1, samplerate_native, fname); + error("%s", msg); + } + else + { + error("WAV file is not mono: %s", fname); + } + remove(fname_temp); + return(0); + } + + f = fopen(fname_temp,"rb"); + if(f == NULL) + { + error("Can't read temp file: %s",fname_temp); + return(0); + } + if(f_report != NULL) + fprintf(f_report, "resampled %s\n", fname); + resample_count++; + resample_wav = 1; + fseek(f,40,SEEK_SET); // skip past the WAV header, up to before "data length" } displ = ftell(f_phdata); @@ -3321,8 +3341,11 @@ static void CompileEquivalents() p_start[2] = n_bytes >> 8; // index of next table p_start[3] = n_bytes; - LoadVoice(voice_name2,0); // reset the original phoneme table - LoadVoiceVariant(save_voice_name,0); + if(gui_flag != 0) + { + LoadVoice(voice_name2,0); // reset the original phoneme table + LoadVoiceVariant(save_voice_name,0); + } } // end of CompileEquivalents @@ -3362,6 +3385,7 @@ static void CompilePhonemeFiles() case kINCLUDE: NextItem(tSTRING); sprintf(buf,"%s%s",path_source,item_string); + if((stack_ix < N_STACK) && (f = fopen_log(f_errors,buf,"rb")) != NULL) { fprintf(f_errors,"include %s\n",item_string); @@ -3421,6 +3445,7 @@ make_envs(); n_envelopes = 0; error_count = 0; + resample_count = 0; memset(markers_used,0,sizeof(markers_used)); f_errors = stderr; @@ -3534,6 +3559,7 @@ memset(markers_used,0,sizeof(markers_used)); // write a word so that further data doesn't start at displ=0 Write4Bytes(f_phdata,version_phdata); + Write4Bytes(f_phdata,samplerate_native); Write4Bytes(f_phindex,version_phdata); memset(ref_hash_tab,0,sizeof(ref_hash_tab)); @@ -3555,9 +3581,10 @@ fprintf(f_errors,"\nRefs %d, Reused %d\n",count_references,duplicate_references fclose(f_phtab); fclose(f_phcontents); - LoadPhData(); - LoadVoice(voice_name2,0); + LoadPhData(NULL); + if(gui_flag != 0) + LoadVoice(voice_name2,0); CompileReport(); report_dict = CompileAllDictionaries(); @@ -3595,6 +3622,8 @@ fprintf(f_errors,"\nRefs %d, Reused %d\n",count_references,duplicate_references fprintf(stderr,"%s\n",fname); } + + ReadPhondataManifest(); } // end of CompilePhonemeData @@ -3759,7 +3788,6 @@ void CompileIntonation() char buf[sizeof(path_source)+120]; error_count = 0; - resample_count = 0; sprintf(fname_errors,"%s%s",path_source,"error_intonation"); if((f_errors = fopen(fname_errors,"w")) == NULL) @@ -4036,7 +4064,7 @@ void CompileIntonation() { DisplayErrorFile(fname_errors); } - LoadPhData(); + LoadPhData(NULL); } // end of CompileIntonation @@ -4044,7 +4072,22 @@ void CompileIntonation() void CompilePhonemeData() { + WavegenInit(22050, 0); + WavegenSetVoice(voice); CompilePhonemeData2("phonemes"); - return; +} + + +void CompileSampleRate() +{ + long value; + value = wxGetNumberFromUser(_T("Compile phoneme data with a specified sample rate"), _T("Sample rate"), _T("Resample (needs sox)"), 22050, 5000, 48000); + + if(value > 1000) + { + WavegenInit(value, 0); + WavegenSetVoice(voice); + CompilePhonemeData2("phonemes"); + } } diff --git a/src/dictionary.cpp b/src/dictionary.cpp index f24f9f7c..880eda41 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -296,10 +296,6 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) // set up indices into data_dictrules InitGroups(tr); - if(tr->groups1[0] == NULL) - { - fprintf(stderr,"Error in %s_rules, no default rule group\n",name); - } // set up hash table for data_dictlist p = &(tr->data_dictlist[8]); diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index 39e26b60..b6f9baf6 100644 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -43,11 +43,11 @@ #include "prosodydisplay.h" -#ifdef deleted -static const char *about_string = "espeakedit: %s\nAuthor: Jonathan Duddington (c) 2009\n\n" + +static const char *about_string2 = "espeakedit: %s\nAuthor: Jonathan Duddington (c) 2009\n\n" "Licensed under GNU General Public License version 3\n" "http://espeak.sourceforge.net/"; -#endif + static const char *about_string = "espeakedit %s
Author: Jonathan Duddington (c) 2009
" "http://espeak.sourceforge.net
" @@ -63,6 +63,7 @@ extern void DictionarySort(const char *dictname); extern void init_z(); extern void CompilePhonemeData(void); +extern void CompileSampleRate(void); extern void CompileMbrola(); extern void CompileIntonation(); extern void InitSpectrumDisplay(); @@ -133,22 +134,21 @@ if(argc > 1) if((strcmp(param,"--help")==0) || (strcmp(param,"-h")==0)) { - printf(about_string,espeak_Info(NULL)); - printf(help_text); + printf(about_string2,espeak_Info(NULL)); + printf("%s", help_text); exit(0); } ConfigInit(); - VoiceReset(0); - WavegenSetVoice(voice); - WavegenInitSound(); if(strcmp(param,"--compile")==0) { + LoadPhData(NULL); + samplerate_native = samplerate = 22050; CompilePhonemeData(); CompileIntonation(); - exit(0); } + exit(0); } ConfigInit(); @@ -205,6 +205,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(MENU_PATH3, MyFrame::OnOptions) EVT_MENU(MENU_PATH4, MyFrame::OnOptions) EVT_MENU(MENU_COMPILE_PH, MyFrame::OnTools) + EVT_MENU(MENU_COMPILE_PH2, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_DICT, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_DICT_DEBUG, MyFrame::OnTools) EVT_MENU(MENU_FORMAT_DICTIONARY, MyFrame::OnTools) @@ -266,6 +267,7 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c int error_flag = 0; int result; int param; + int srate; notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxSize(312,760)); // notebook->AddPage(voicedlg,_T("Voice"),FALSE); @@ -301,9 +303,8 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c SetSize(pos.x, pos.y, size.GetWidth(), size.GetHeight()); LoadConfig(); - WavegenInitSound(); - if((result = LoadPhData()) != 1) + if((result = LoadPhData(&srate)) != 1) { if(result == -1) wxLogError(_T("Failed to read espeak-data/phontab,phondata,phonindex\nPath = ")+wxString(path_home,wxConvLocal)+_T("\n\nThe 'eSpeak' package needs to be installed")); @@ -311,7 +312,10 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c wxLogError(_T("Wrong version of espeak-data at:\n")+ wxString(path_home,wxConvLocal)+_T("\nVersion 0x%x (expects 0x%x)"),result,version_phdata); error_flag = 1; + srate = 22050; } + WavegenInit(srate,0); + WavegenInitSound(); f_trans = stdout; option_ssml = 1; @@ -350,7 +354,13 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c void MyFrame::SetVoiceTitle(char *voice_name) {//========================================== char buf[100]; - SetTitle(AppName + _T(" - ") + wxString(voice_name,wxConvLocal) + _T(" voice")); + + if(samplerate_native == 22050) + sprintf(buf, " - %s voice", voice_name); + else + sprintf(buf, " - %s voice %dHz", voice_name, samplerate_native); + SetTitle(AppName + wxString(buf,wxConvLocal)); + if((data_menu != NULL) && (translator != NULL)) { sprintf(buf,"Compile &dictionary '%s'",translator->dictionary_name); @@ -738,6 +748,12 @@ void MyFrame::OnTools(wxCommandEvent& event) case MENU_COMPILE_PH: CompilePhonemeData(); + SetVoiceTitle(voice_name2); + break; + + case MENU_COMPILE_PH2: + CompileSampleRate(); + SetVoiceTitle(voice_name2); break; case MENU_COMPILE_MBROLA: diff --git a/src/extras.cpp b/src/extras.cpp index 5f056464..a04e4704 100644 --- a/src/extras.cpp +++ b/src/extras.cpp @@ -135,7 +135,7 @@ int TestSynthCallback(short *wav, int numsamples, espeak_EVENT *events) else if(type==espeakEVENT_PHONEME) { - char buf[10]; +// char buf[10]; fprintf(f_events,"[%s]\n",WordToString(events->id.number)); //old version, only 4 characters bytes // memcpy(buf, events->id.string, 8); // buf[8] = 0; @@ -206,7 +206,7 @@ static const unsigned short KOI8_R[0x60] = { #define N_CHARS 34 -#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 @@ -236,7 +236,7 @@ static void DecodePhonemes2(const char *inptr, char *outptr) continue; /* indicates unrecognised phoneme */ if((ph = phoneme_tab[phcode]) == NULL) continue; - + if((ph->type == phSTRESS) && (ph->std_length <= 4) && (ph->program == 0)) { if(ph->std_length > 2) @@ -281,7 +281,7 @@ static void DecodePhonemes2(const char *inptr, char *outptr) else if(mnem != 0) { - while((c = (mnem & 0xff)) != 0) + while((c = (mnem & 0xff)) != 0) { *outptr++ = c; mnem = mnem >> 8; @@ -363,7 +363,7 @@ void Lexicon_It(int pass) path_dir1 = wxFileName(fname_lex).GetPath(); strcpy(buf_out, path_dir1.mb_str(wxConvLocal)); sprintf(buf, "%s/IT_errors", buf_out); - + if((f_out = fopen(buf,"w")) == NULL) { str = wxString(buf, wxConvLocal); @@ -412,7 +412,7 @@ void Lexicon_It(int pass) if((p = strstr(buf,"//")) != NULL) *p = 0; - + if((sscanf(buf,"%s %s",word,temp)) < 2) continue; @@ -522,7 +522,7 @@ void Lexicon_It(int pass) fputc(*p, f_listx); // omit secondary stress marks } fputc('\n',f_listx); - + } else if((stress_posn1 != stress_posn2) && (stress_posn1 > 0) && (stress_posn2 > 0)) @@ -706,7 +706,7 @@ void Lexicon_De() return; } path_dir1 = wxFileName(fname).GetPath(); - + if((f_out = fopen("compare_de","w")) == NULL) { wxLogError(_T("Can't write file ")); @@ -934,7 +934,7 @@ void Lexicon_Bg() FILE *f_in; FILE *f_out; - + char word[80]; char word_in[80]; char phonemes[N_WORD_PHONEMES]; @@ -1101,7 +1101,7 @@ if(n_stress > 1) n_stress = 1; if(done) n_out++; - } + } n_words++; } @@ -1383,10 +1383,10 @@ void Lexicon_Ru() len = strlen(suffix); if(len >= (wlen-2)) continue; - + if(ru_stress > (vcount - suffixes[sfx].syllables)) continue; - + if(strcmp(suffix,&word[wlen-len])==0) { strcpy(word2,word); @@ -1547,7 +1547,7 @@ void CountWordFreq(wxString path, wcount **hashtab) // skip leading spaces, numbers, etc if(feof(f_in)) break; } - + // read utf8 bytes until a space, number or punctuation ix = 0; while(!feof(f_in) && (c >= 'A') && (ix < sizeof(buf)-1)) @@ -1557,7 +1557,7 @@ void CountWordFreq(wxString path, wcount **hashtab) } buf[ix++] = 0; buf[ix] = 0; - + // the buf may contain non-alphabetic characters j = 0; n_chars = 0; @@ -1583,7 +1583,7 @@ void CountWordFreq(wxString path, wcount **hashtab) } } fclose(f_in); - + } // end of CountWordFreq @@ -1645,7 +1645,7 @@ void MakeWordFreqList() free(p); } fclose(f_out); - + } // end of Make WorkFreqList @@ -2129,9 +2129,9 @@ void SetSpeedTab(void) // Interpolation table to translate from words-per-minute to internal speed // words-per-minute values (measured) static float wpm1[N_WPM] = - {0, 82, 96, 108, 124, 134, 147, 162, 174, 189, 224, 259, 273, 289, 307, 326, 346, 361, 370 }; + {0, 82, 96, 108, 124, 134, 147, 162, 174, 189, 224, 259, 273, 289, 307, 326, 346, 361, 370 }; // corresponding internal speed values - static float wpm2[N_WPM] = + static float wpm2[N_WPM] = {0,253,200, 170, 140, 125, 110, 95, 85, 75, 55, 40, 35, 30, 25, 20, 15, 10, 5 }; unsigned char speed_lookup[290]; @@ -2245,7 +2245,7 @@ void CharsetToUnicode(const char *charset) #ifdef deleted void Test2() { -// +// char buf[120]; FILE *f; FILE *f_out; @@ -2299,7 +2299,7 @@ if(control==2) f = fopen("/home/jsd1/speechdata/text/test.txt","r"); if(f==NULL) return; - + while(!feof(f) && (ix < sizeof(textbuf)-2)) { diff --git a/src/main.h b/src/main.h index 0402f15b..f9a8a12f 100755 --- a/src/main.h +++ b/src/main.h @@ -136,6 +136,7 @@ enum { MENU_PROSODY, MENU_COMPILE_PH, + MENU_COMPILE_PH2, MENU_COMPILE_DICT, MENU_COMPILE_DICT_DEBUG, MENU_FORMAT_DICTIONARY, diff --git a/src/menus.cpp b/src/menus.cpp index b405b71a..917f4899 100644 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2010 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -90,6 +90,7 @@ wxMenuBar *MakeMenu(int type, const char *dict_name) // DATA MENU data_menu = new wxMenu; data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data")); + data_menu->Append(MENU_COMPILE_PH2, _("Change sample &rate")); data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary")); data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)")); data_menu->AppendSeparator(); diff --git a/src/numbers.cpp b/src/numbers.cpp index c2a30153..de3e5e17 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2011 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -435,7 +435,7 @@ void LookupAccentedLetter(Translator *tr, unsigned int letter, char *ph_buf) if((letter >= 0x250) && (letter <= 0x2a8)) { accent_data = letter_accents_250[letter - 0x250]; - } + } if(accent_data != 0) { @@ -551,7 +551,7 @@ void LookupLetter(Translator *tr, unsigned int letter, int next_byte, char *ph_b // if the $accent flag is set for this letter, use the accents table (below) dict_flags[1] = 0; - + if(Lookup(tr, &single_letter[1], ph_buf3) == 0) { single_letter[1] = ' '; @@ -678,7 +678,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) if((ph_buf[0]==0) && !iswspace(letter)) Lookup(tr, "_??", ph_buf); - + if(ph_buf[0] != 0) { // speak the hexadecimal number of the character code @@ -872,7 +872,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) static const char *roman_numbers = "ixcmvld"; static int roman_values[] = {1,10,100,1000,5,50,500}; - + acc = 0; prev = 0; subtract = 0x7fff; @@ -922,7 +922,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) if(isdigit(word[0])) return(0); // eg. 'xx2' - + acc += prev; if(acc < tr->langopts.min_roman) return(0); @@ -985,7 +985,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) static const char *M_Variant(int value) {//==================================== // returns M, or perhaps MA or MB for some cases - + int teens = 0; if(((value % 100) > 10) && ((value % 100) < 20)) @@ -1074,7 +1074,7 @@ static int LookupThousands(Translator *tr, int value, int thousandplex, int thou if(found_value == 0) { - if((value % 100) >= 20) + if((value % 100) >= 20) { Lookup(tr, "_0of", ph_of); } @@ -1199,7 +1199,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out if(is_ordinal) { strcpy(ph_ordinal, ph_ordinal2); - + if(control & 4) { sprintf(string,"_%d%cx",value,ord_type); // LANG=hu, special word for 1. 2. when there are no higher digits @@ -1212,7 +1212,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out } found_ordinal = found; } - + if(found == 0) { if(control & 2) @@ -1246,9 +1246,9 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out } } } - + // no, speak as tens+units - + if((control & 0x10) && (value < 10)) { // speak leading zero @@ -1262,8 +1262,8 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out } else { - - if((is_ordinal) && + + if((is_ordinal) && ((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS) || (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL))) { sprintf(string,"_%dX%c", tens, ord_type); @@ -1283,7 +1283,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out sprintf(string,"_%dX", tens); Lookup(tr, string, ph_tens); } - + if((ph_tens[0] == 0) && (tr->langopts.numbers & NUM_VIGESIMAL)) { // tens not found, (for example) 73 is 60+13 @@ -1291,12 +1291,12 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out sprintf(string,"_%dX", tens & 0xfe); Lookup(tr, string, ph_tens); } - + ph_digits[0] = 0; if(units > 0) - { + { found = 0; - + if((control & 2) && (digit_lookup[0] != 0)) { // we have an entry for this digit (possibly together with the next word) @@ -1346,7 +1346,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out } } } - + if((is_ordinal) && (found_ordinal == 0) && (ph_ordinal[0] == 0)) { if((value >= 20) && (((value % 10) == 0) || (tr->langopts.numbers & NUM_SWAP_TENS))) @@ -1354,7 +1354,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out if(ph_ordinal[0] == 0) Lookup(tr, "_ord", ph_ordinal); } - + if((tr->langopts.numbers & (NUM_SWAP_TENS | NUM_AND_UNITS)) && (ph_tens[0] != 0) && (ph_digits[0] != 0)) { Lookup(tr, "_0and", ph_and); @@ -1377,7 +1377,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out { if((next_phtype = phoneme_tab[(unsigned int)(ph_digits[0])]->type) == phSTRESS) next_phtype = phoneme_tab[(unsigned int)(ph_digits[1])]->type; - + if((phoneme_tab[(unsigned int)(ph_tens[ix])]->type == phVOWEL) && (next_phtype == phVOWEL)) ph_tens[ix] = 0; } @@ -1559,13 +1559,13 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null sprintf(string,"_%dC0",hundreds); found = Lookup(tr, string, ph_digits); } - + if(!found) { sprintf(string,"_%dC",hundreds); found = Lookup(tr, string, ph_digits); // is there a specific pronunciation for n-hundred ? } - + if(found) { ph_100[0] = 0; @@ -1628,7 +1628,7 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null x = 8; // use variant (feminine) for before thousands and millions } - if(LookupNum2(tr, tensunits, x | control & 0x100, buf2) != 0) + if(LookupNum2(tr, tensunits, x | (control & 0x100), buf2) != 0) { if(tr->langopts.numbers & NUM_SINGLE_AND) ph_hundred_and[0] = 0; // don't put 'and' after 'hundred' if there's 'and' between tens and units @@ -1787,7 +1787,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned // this is an ordinal suffix ordinal = 2; flags[0] |= FLAG_SKIPWORDS; - skipwords = 1; + skipwords = 1; } } } @@ -2048,7 +2048,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned break; n_digits++; strcat(ph_out, buf1); - } + } } } diff --git a/src/options.cpp b/src/options.cpp index 23a35c5f..5936111d 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2007 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -79,7 +79,7 @@ Options::~Options() for(ix=0; ix < 1; ix++) delete m_lab[ix]; - + delete m_samplerate; delete m_save; delete m_close; @@ -89,13 +89,13 @@ void Options::OnCommand(wxCommandEvent& event) {//=========================================== int id; int value; - + switch(id = event.GetId()) { case wxID_SAVE: value = GetNumeric(m_samplerate); if(value > 0) WavegenInit(value,0); - + Destroy(); break; @@ -120,11 +120,10 @@ void ConfigSetPaths() void ConfigInit() {//============== - long value; wxString string; wxString basedir; const char *path_base; - + #ifdef PLATFORM_WINDOWS int found = 0; char buf[200]; @@ -134,7 +133,7 @@ void ConfigInit() { sprintf(path_home,"%s\\espeak-data",path_base); if(GetFileLength(path_home) == -2) - found = 1; // an espeak-data directory exists + found = 1; // an espeak-data directory exists } if(found == 0) @@ -142,7 +141,7 @@ void ConfigInit() if(pRegKey->Exists() ) { wxString RegVal; - pRegKey->QueryValue(_T("Path"),RegVal); + pRegKey->QueryValue(_T("Path"),RegVal); strncpy0(buf,RegVal.mb_str(wxConvLocal),sizeof(buf)); path_base = buf; } @@ -161,12 +160,6 @@ void ConfigInit() wxFileConfig *pConfig = new wxFileConfig(_T("espeakedit")); wxFileConfig::Set(pConfig); - pConfig->Read(_T("/samplerate"),&value,22050); -#ifdef PLATFORM_WINDOWS - value = 22050; -#endif - WavegenInit(value,0); - basedir = wxString(path_base,wxConvLocal); // this is only used to set defaults for other paths if they are not in the config file pConfig->Read(_T("/spectload"),&path_spectload,basedir+_T("/phsource")); pConfig->Read(_T("/spectload2"),&path_spectload2,basedir+_T("/phsource")); diff --git a/src/prosodydisplay.cpp b/src/prosodydisplay.cpp index db31955d..4bb49ec1 100644 --- a/src/prosodydisplay.cpp +++ b/src/prosodydisplay.cpp @@ -50,6 +50,86 @@ static wxPen PEN_PHSELECTED(wxColour(255,0,0),2,wxSOLID); static wxPen PEN_PHSTRESSED(wxColour(80,80,196),3,wxSOLID); static wxPen PEN_PHSTRESSED2(wxColour(160,160,255),2,wxSOLID); + + + +typedef struct { + unsigned int value; + char *name; +} NAMETAB; + +NAMETAB *manifest = NULL; +int n_manifest; + +const char *LookupManifest(unsigned int addr) +{//============================================= + int ix; + + if(manifest != NULL) + { + for(ix=0; ix < n_manifest; ix++) + { + if(manifest[ix].value == addr) + return(manifest[ix].name); + if(manifest[ix].value > addr) + break; + } + } + return(""); +} + + +void ReadPhondataManifest() +{//========================= +// Read the phondata-manifest file + FILE *f; + int n_lines=0; + int ix; + char *p; + unsigned int value; + char buf[sizeof(path_home)+40]; + char name[120]; + + sprintf(buf,"%s%c%s",path_home,PATHSEP,"phondata-manifest"); + if((f = fopen(buf, "r")) == NULL) + return; + + while(fgets(buf, sizeof(buf), f) != NULL) + n_lines++; + + rewind(f); + + if(manifest != NULL) + { + for(ix=0; ix < n_manifest; ix++) + free(manifest[ix].name); + } + + if((manifest = (NAMETAB *)realloc(manifest, n_lines * sizeof(NAMETAB))) == NULL) + return; + + n_manifest = 0; + while(fgets(buf, sizeof(buf), f) != NULL) + { + if(!isalpha(buf[0])) + continue; + + if(sscanf(&buf[2], "%x %s", &value, name) == 2) + { + if((p = (char *)malloc(strlen(name)+1)) != NULL) + { + strcpy(p, name); + manifest[n_manifest].value = value; + manifest[n_manifest].name = p; + n_manifest++; + } + } + } + fclose(f); +} + + + ProsodyDisplay::ProsodyDisplay(wxWindow *parent, const wxPoint& pos, const wxSize& size) : wxScrolledWindow(parent, -1, pos, size, wxSUNKEN_BORDER | wxNO_FULL_REPAINT_ON_RESIZE) @@ -76,6 +156,7 @@ void InitProsodyDisplay() int ix; wxString string; + ReadPhondataManifest(); menu_envelopes = new wxMenu; // entries match those in envelope_data[] in intonation.cpp @@ -142,6 +223,7 @@ void ProsodyDisplay::SelectPh(int index) int ix; const char *name = "?"; char buf[120]; + char len_string[20]; if(index < 0) return; @@ -162,8 +244,12 @@ void ProsodyDisplay::SelectPh(int index) } y1 = p->pitch1; y2 = p->pitch2; - sprintf(buf,"Stress %s%d Amp %2d StdLength %2d LengthMod %2d Pitch %3d %3d %s PhFlags %.2x ", - emphasized,p->stresslevel&0x7,p->amp,p->std_length*2, p->length,y1,y2,name,p->ph->phflags); + len_string[0] = 0; + if(p->std_length > 0) + sprintf(len_string," Length %d", p->std_length*2); + + sprintf(buf,"Stress %s%d Amp %2d LengthMod %2d Pitch %3d %3d %s PhFlags %.2x [%s%s]", + emphasized,p->stresslevel&0x7,p->amp, p->length,y1,y2,name,p->ph->phflags, LookupManifest(p->phontab_addr), len_string); wxLogStatus(wxString(buf,wxConvLocal)); } @@ -625,4 +711,3 @@ void MyFrame::OnProsody(wxCommandEvent& WXUNUSED(event)) adding_page = 2; // work around for wxNotebook bug (version 2.8.7) screenpages->AddPage(prosodycanvas, _T("Prosody"), true); } - diff --git a/src/readclause.cpp b/src/readclause.cpp index 2aa2c4fa..af2b294b 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -736,7 +736,6 @@ static int LoadSoundFile(const char *fname, int index) { int ix; int fd_temp; - const char *resample; int header[3]; char command[sizeof(fname2)+sizeof(fname2)+40]; @@ -750,17 +749,11 @@ static int LoadSoundFile(const char *fname, int index) fclose(f); f = NULL; - if(header[2] == samplerate) - resample = ""; - else - resample = "polyphase"; - strcpy(fname_temp,"/tmp/espeakXXXXXX"); if((fd_temp = mkstemp(fname_temp)) >= 0) { close(fd_temp); -// sprintf(fname_temp,"%s.wav",tmpnam(NULL)); - sprintf(command,"sox \"%s\" -r %d -w -s -c1 %s %s\n", fname, samplerate, fname_temp, resample); + sprintf(command,"sox \"%s\" -r %d -c1 -t wav %s\n", fname, samplerate, fname_temp); if(system(command) == 0) { fname = fname_temp; diff --git a/src/speak.cpp b/src/speak.cpp index 35d756da..661df32c 100644 --- a/src/speak.cpp +++ b/src/speak.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2007 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -397,6 +397,7 @@ static int initialise(void) {//======================== int param; int result; + int srate = 22050; // default sample rate // It seems that the wctype functions don't work until the locale has been set // to something other than the default "C". Then, not only Latin1 but also the @@ -412,8 +413,7 @@ static int initialise(void) #endif - WavegenInit(22050,0); // 22050 - if((result = LoadPhData()) != 1) + if((result = LoadPhData(&srate)) != 1) { if(result == -1) { @@ -423,6 +423,7 @@ static int initialise(void) else fprintf(stderr,"Wrong version of espeak-data 0x%x (expects 0x%x) at %s\n",result,version_phdata,path_home); } + WavegenInit(srate,0); LoadConfig(); SetVoiceStack(NULL, ""); SynthesizeInit(); diff --git a/src/speak_lib.cpp b/src/speak_lib.cpp index 6c8e8dc4..78feaff8 100644 --- a/src/speak_lib.cpp +++ b/src/speak_lib.cpp @@ -377,11 +377,12 @@ static int initialise(int control) {//=============================== int param; int result; + int srate = 22050; // default sample rate 22050 Hz err = EE_OK; LoadConfig(); - WavegenInit(22050,0); // 22050 - if((result = LoadPhData()) != 1) + + if((result = LoadPhData(&srate)) != 1) // reads sample rate from espeak-data/phontab { if(result == -1) { @@ -394,6 +395,7 @@ static int initialise(int control) else fprintf(stderr,"Wrong version of espeak-data 0x%x (expects 0x%x) at %s\n",result,version_phdata,path_home); } + WavegenInit(srate,0); memset(¤t_voice_selected,0,sizeof(current_voice_selected)); SetVoiceStack(NULL, ""); diff --git a/src/synthdata.cpp b/src/synthdata.cpp index b68fd46b..ae260e35 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,8 +35,8 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.46.35 14.Feb.13"; -const int version_phdata = 0x014631; +const char *version_string = "1.46.36 20.Feb.13"; +const int version_phdata = 0x014636; int option_device_number = -1; FILE *f_logespeak = NULL; @@ -108,13 +108,14 @@ static char *ReadPhFile(void *ptr, const char *fname, int *size) } // end of ReadPhFile -int LoadPhData() -{//============= +int LoadPhData(int *srate) +{//======================== int ix; int n_phonemes; int version; int result = 1; int length; + int rate; unsigned char *p; int *pw; @@ -126,14 +127,16 @@ int LoadPhData() return(-1); if((tunes = (TUNE *)ReadPhFile((void *)(tunes),"intonations",&length)) == NULL) return(-1); - wavefile_data = (unsigned char *)phondata_ptr; + wavefile_data = (unsigned char *)phondata_ptr; n_tunes = length / sizeof(TUNE); - // read the version number from the first 4 bytes of phondata - version = 0; + // read the version number and sample rate from the first 8 bytes of phondata + version = 0; // bytes 0-3, version number + rate = 0; // bytes 4-7, sample rate for(ix=0; ix<4; ix++) { version += (wavefile_data[ix] << (ix*8)); + rate += (wavefile_data[ix+4] << (ix*8)); } if(version != version_phdata) @@ -163,6 +166,8 @@ int LoadPhData() if(phoneme_tab_number >= n_phoneme_tables) phoneme_tab_number = 0; + if(srate != NULL) + *srate = rate; return(result); } // end of LoadPhData @@ -970,7 +975,9 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ phdata->pd_param[i_LENGTH_MOD] = ph->length_mod; if(ph->program == 0) + { return; + } end_flag = 0; @@ -1215,7 +1222,13 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ memcpy(&worddata->prev_vowel, &plist[0], sizeof(PHONEME_LIST)); } +#ifdef _ESPEAKEDIT plist->std_length = phdata->pd_param[i_SET_LENGTH]; + if(phdata->sound_addr[0] != 0) + plist->phontab_addr = phdata->sound_addr[0]; // FMT address + else + plist->phontab_addr = phdata->sound_addr[1]; // WAV address +#endif } // end of InterpretPhoneme diff --git a/src/synthesize.cpp b/src/synthesize.cpp index d4e6a769..1d34ade7 100644 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2010 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -40,7 +40,7 @@ static void SmoothSpect(void); // list of phonemes in a clause int n_phoneme_list=0; -PHONEME_LIST phoneme_list[N_PHONEME_LIST]; +PHONEME_LIST phoneme_list[N_PHONEME_LIST+1]; int mbrola_delay; char mbrola_name[20]; @@ -1395,6 +1395,8 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) prev = &phoneme_list[ix-1]; next = &phoneme_list[ix+1]; next2 = &phoneme_list[ix+2]; + if(next2->ph == NULL) + break; if(p->synthflags & SFLAG_EMBEDDED) { @@ -1448,6 +1450,9 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) { case phPAUSE: DoPause(p->length,0); +#ifdef _ESPEAKEDIT + p->std_length = p->ph->std_length; +#endif break; case phSTOP: diff --git a/src/synthesize.h b/src/synthesize.h index 6a83b8da..b56edfe6 100644 --- a/src/synthesize.h +++ b/src/synthesize.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2007 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -220,7 +220,10 @@ typedef struct { unsigned char newword; // bit 0=start of word, bit 1=end of clause, bit 2=start of sentence unsigned char pitch1; unsigned char pitch2; +#ifdef _ESPEAKEDIT unsigned char std_length; + unsigned int phontab_addr; +#endif } PHONEME_LIST; @@ -435,7 +438,7 @@ extern PHONEME_TAB *phoneme_tab[N_PHONEME_TAB]; // list of phonemes in a clause extern int n_phoneme_list; -extern PHONEME_LIST phoneme_list[N_PHONEME_LIST]; +extern PHONEME_LIST phoneme_list[N_PHONEME_LIST+1]; extern unsigned int embedded_list[]; extern unsigned char env_fall[128]; @@ -510,7 +513,7 @@ unsigned int LookupSound(PHONEME_TAB *ph1, PHONEME_TAB *ph2, int which, int *mat frameref_t *LookupSpect(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, int *n_frames, PHONEME_LIST *plist); unsigned char *LookupEnvelope(int ix); -int LoadPhData(); +int LoadPhData(int *srate); void SynthesizeInit(void); int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume); diff --git a/src/translate.cpp b/src/translate.cpp index c6071586..a363ad6e 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -3378,6 +3378,8 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre } MakePhonemeList(tr, clause_pause, new_sentence); + phoneme_list[N_PHONEME_LIST].ph = NULL; // recognize end of phoneme_list array, in Generate() + phoneme_list[N_PHONEME_LIST].sourceix = 1; if(embedded_count) // ???? is this needed { diff --git a/src/transldlg.cpp b/src/transldlg.cpp index c095a4e3..a71fa1ff 100644 --- a/src/transldlg.cpp +++ b/src/transldlg.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2007 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -503,13 +503,15 @@ void TranslDlg::OnCommand(wxCommandEvent& event) if((n_ph_list + n_phoneme_list) >= N_PH_LIST) { - n_phoneme_list = N_PH_LIST - n_ph_list - n_phoneme_list; + n_phoneme_list = N_PH_LIST - n_ph_list; } memcpy(&ph_list[n_ph_list],phoneme_list,sizeof(PHONEME_LIST)*n_phoneme_list); n_ph_list += n_phoneme_list; } + ph_list[N_PH_LIST].ph = NULL; // to recognize overrun off list (in Generate() ) + t_phonetic->Clear(); if(option_phonemes == 2) {