diff --git a/.gitignore b/.gitignore index 020e22cb..2a949921 100644 --- a/.gitignore +++ b/.gitignore @@ -97,6 +97,7 @@ espeak-data/config espeak-data/dictsource espeak-data/phsource espeak-data/*_dict +espeak-data/mbrola_ph/*_phtrans espeak-data/intonations espeak-data/phondata espeak-data/phondata-manifest diff --git a/Makefile.am b/Makefile.am index b62bc4ca..3704be36 100644 --- a/Makefile.am +++ b/Makefile.am @@ -30,7 +30,7 @@ EXTRA_DIST += ChangeLog ##### standard build actions: -all: jni espeakdata apk-release +all-local: jni espeakdata apk-release uninstall-hook: rm -rf $(DESTDIR)$(DATADIR) @@ -825,3 +825,187 @@ else espeak-data/zhy_dict: src/espeak phsource/phonemes.stamp dictsource/zhy_rules dictsource/zhy_extra endif cd dictsource && ESPEAK_DATA_PATH=$(PWD) LD_LIBRARY_PATH=../src:${LD_LIBRARY_PATH} ../src/espeak --compile=zhy && cd .. + +##### mbrola: + +mbrola: \ + espeak-data/mbrola_ph/af1_phtrans \ + espeak-data/mbrola_ph/cr1_phtrans \ + espeak-data/mbrola_ph/cs_phtrans \ + espeak-data/mbrola_ph/de2_phtrans \ + espeak-data/mbrola_ph/de4_phtrans \ + espeak-data/mbrola_ph/de6_phtrans \ + espeak-data/mbrola_ph/ee1_phtrans \ + espeak-data/mbrola_ph/en1_phtrans \ + espeak-data/mbrola_ph/es_phtrans \ + espeak-data/mbrola_ph/fr1_phtrans \ + espeak-data/mbrola_ph/gr2_phtrans \ + espeak-data/mbrola_ph/grc-de6_phtrans \ + espeak-data/mbrola_ph/hn1_phtrans \ + espeak-data/mbrola_ph/hu1_phtrans \ + espeak-data/mbrola_ph/ic1_phtrans \ + espeak-data/mbrola_ph/id1_phtrans \ + espeak-data/mbrola_ph/in1_phtrans \ + espeak-data/mbrola_ph/ir1_phtrans \ + espeak-data/mbrola_ph/it3_phtrans \ + espeak-data/mbrola_ph/la1_phtrans \ + espeak-data/mbrola_ph/lt1_phtrans \ + espeak-data/mbrola_ph/lt2_phtrans \ + espeak-data/mbrola_ph/mx1_phtrans \ + espeak-data/mbrola_ph/mx2_phtrans \ + espeak-data/mbrola_ph/nl_phtrans \ + espeak-data/mbrola_ph/pl1_phtrans \ + espeak-data/mbrola_ph/pt1_phtrans \ + espeak-data/mbrola_ph/ptbr_phtrans \ + espeak-data/mbrola_ph/ptbr4_phtrans \ + espeak-data/mbrola_ph/ro1_phtrans \ + espeak-data/mbrola_ph/sv_phtrans \ + espeak-data/mbrola_ph/sv2_phtrans \ + espeak-data/mbrola_ph/tr1_phtrans \ + espeak-data/mbrola_ph/us_phtrans \ + espeak-data/mbrola_ph/us3_phtrans \ + espeak-data/mbrola_ph/vz_phtrans + +espeak-data/mbrola_ph/af1_phtrans: phsource/mbrola/af1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/cr1_phtrans: phsource/mbrola/cr1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/cs_phtrans: phsource/mbrola/cs src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/de2_phtrans: phsource/mbrola/de2 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/de4_phtrans: phsource/mbrola/de4 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/de6_phtrans: phsource/mbrola/de6 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/ee1_phtrans: phsource/mbrola/ee1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/en1_phtrans: phsource/mbrola/en1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/es_phtrans: phsource/mbrola/es src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/fr1_phtrans: phsource/mbrola/fr1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/gr2_phtrans: phsource/mbrola/gr2 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/grc-de6_phtrans: phsource/mbrola/grc-de6 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/hn1_phtrans: phsource/mbrola/hn1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/hu1_phtrans: phsource/mbrola/hu1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/ic1_phtrans: phsource/mbrola/ic1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/id1_phtrans: phsource/mbrola/id1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/in1_phtrans: phsource/mbrola/in1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/ir1_phtrans: phsource/mbrola/ir1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/it3_phtrans: phsource/mbrola/it3 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/la1_phtrans: phsource/mbrola/la1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/lt1_phtrans: phsource/mbrola/lt1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/lt2_phtrans: phsource/mbrola/lt2 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/mx1_phtrans: phsource/mbrola/mx1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/mx2_phtrans: phsource/mbrola/mx2 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/nl_phtrans: phsource/mbrola/nl src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/pl1_phtrans: phsource/mbrola/pl1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/pt1_phtrans: phsource/mbrola/pt1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/ptbr_phtrans: phsource/mbrola/ptbr src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/ptbr4_phtrans: phsource/mbrola/ptbr4 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/ro1_phtrans: phsource/mbrola/ro1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/sv_phtrans: phsource/mbrola/sv src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/sv2_phtrans: phsource/mbrola/sv2 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/tr1_phtrans: phsource/mbrola/tr1 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/us_phtrans: phsource/mbrola/us src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/us3_phtrans: phsource/mbrola/us3 src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< + +espeak-data/mbrola_ph/vz_phtrans: phsource/mbrola/vz src/espeakedit + mkdir -p espeak-data/mbrola_ph + ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$< diff --git a/autogen.sh b/autogen.sh index bd95ba53..11d8abdd 100755 --- a/autogen.sh +++ b/autogen.sh @@ -9,7 +9,7 @@ fi mkdir -p m4 touch AUTHORS touch NEWS -ln -svf README.md README +ln -sf README.md README if [ -d .git ] ; then git submodule update --init --recursive || exit 1 diff --git a/dictsource/en_list b/dictsource/en_list index aeae8476..538a0f22 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -18,7 +18,7 @@ // ?8 Use full vowel, not schwa in some word endings -// $alt1 use strong ending (-age, -an, -ance, -ative, -table, -ed, -eria, -et, -inal, -ier -mouth -on -or -ored, -ose, -s) +// $alt1 use strong ending (-age, -an, -ance, -ate, -ative, -table, -ed, -eria, -et, -inal, -ier -mouth -on -or -ored, -ose, -s) // $alt2 use weak ending (ace, ain, an, ar*, ard, ate, ath, ell, ery, ess, et, ie, ile, ine, men, on, ot) // $alt3 use weak first vowel, a->[a#], e->[@], o->[0#] // $alt4 separate 'h', not 'th' 'ph' 'sh'; [t2] not [t] @@ -500,16 +500,16 @@ _17 s'Ev@nti:n ?7 _17 s'@v@nti:n _18 'eIti:n _19 n'aInti:n -_2X tw'Ent2i -_3X T'3:ti -?5 _3X T'IRti -_4X f'o@ti -_5X f'Ifti -_6X s'Iksti -_7X s'Ev@nti -?7 _7X s'@v@nti -_8X 'eIti -_9X n'aInti +_2X tw'Ent2i|| +_3X T'3:ti|| +?5 _3X T'IRti|| +_4X f'o@ti|| +_5X f'Ifti|| +_6X s'Iksti|| +_7X s'Ev@nti|| +?7 _7X s'@v@nti|| +_8X 'eIti|| +_9X n'aInti|| _0C h'Vndr@d _0M1 T'aUz@nd @@ -570,6 +570,7 @@ asap $abbrev ati $abbrev atk $abbrev atm $abbrev +atv $abbrev avc $abbrev avg $abbrev awol eIw0l @@ -894,6 +895,7 @@ anchovy antSoUvi anemone a#nEm@ni anemometer anIm'0mI2t3 anesthetize $alt3 +antacid $2 anew a#nju: ?3 anew a#nu: anime anImeI @@ -1026,6 +1028,7 @@ axon aks0n ayuh a#j'@ ayup a#jVp +backdate $2 backend bak'End backstory baksto@ri badmouth $alt1 @@ -1065,6 +1068,7 @@ batman batman battalion $alt3 bazaar $alt3 bazooka ba#zu:k@ +beating bi:tIN bedouin bEdu:I#n beige beIZ belisha b@l'i:S@ @@ -1085,6 +1089,7 @@ bias baI@s biased baI@st bible baIb@L bidet bi:deI +bifurcate $1 bigot bIg@t // -ed bijou bi:Zu: bikini bIk'i:ni @@ -1196,6 +1201,7 @@ caldera k0ld'e@r@ caliche ka#li:tSi caliph $alt6 calix $alt6 +callous kal@s // -ed calv kA:v // for calved, calving ?3 calv kav // for calved, calving calve kA:v @@ -1240,6 +1246,7 @@ cashmere kaSmi@3 ?3 cashmere kaZmi@3 casino $alt3 cassette $alt3 +castrate $2 catastrophe $alt3 catastrophic kat@str'0fIk catarrh k@tA@ @@ -1264,7 +1271,7 @@ centurion sEntS'U@ri@n ceres si@ri:z cerise s@ri:z ?3 certain s3:?n- -certificate s3tIfIk@t +certificate s3tIfIk@t $onlys cerulean $alt3 c'est seI $u chagrin SagrIn @@ -1436,6 +1443,7 @@ conker $1 coquina koUk'i:n@ conquistador k0nk'i:st@do@ conscience k0nS@ns +console k@nsoUl $verb consort $1 consort $verb construct $1 $onlys @@ -1450,6 +1458,7 @@ contest $verb context $1 contract $1 $onlys contract $verb +contrail k0ntreIl contralto k@ntr'altoU contraption k@ntr'apS@n contrary k0ntr@ri @@ -1552,6 +1561,7 @@ debut deIbju: début debut $text decade dEkeId decaf di:kaf +decane dEkeIn decedent dI#si:d@nt decent di:s@nt decibel dEsI#b@L @@ -1571,6 +1581,7 @@ defens dI2fEns // for defensible deficit dEfI2sIt definitive dI2fInI2tIv ?!3 defragment di:fragm'Ent +degas di:g'as degenerate $alt2 $noun dego deIgoU deice di:'aIs @@ -1602,9 +1613,9 @@ derogative $2 descant dEskant descry dI2skreI desert dI2z3:t -desert dEs3t $only -desert dI2z3:t $verb -desolate dEs@l@t +desert dEs3t $only +desert dI2z3:t $verb +desolate dEs@l@t $only desperate $alt2 ?3 detail $2 detante deIt'0nt @@ -1660,6 +1671,7 @@ dishy dISi dismal dIzm@l disparate dIsp@r@t disreputable $2 +dissipate $1 distributor $2 distro dIstroU disuse dIs'ju:s @@ -1691,6 +1703,8 @@ drier draI3 driest draI|@st duet dju:'Et dugout dVgaUt +dumber dVm3 +dumbest dVm@st dungaree dVNga#r'i: ?!3 dupe dju:p duress $2 @@ -1724,13 +1738,10 @@ eh eI eid i:d eke i:k el ,El $only -electricity I2lEktr'IsI2ti -electrode I2lEktroUd -electron I2lEktr0n -electrocute $2 -elicit I2lIsI2t +electrode I#lEktroUd +elicit I#lIsI#t élite Il'i:t -elixir I2lIks3 +elixir I#lIks3 embed Emb'Ed ember Emb3 embole $1 // embolism @@ -1746,6 +1757,7 @@ enroute 0nr'u:t ensemble 0ns'0mb@L entendre 0nt'0ndr@- entente 0nt'0nt +entirity Ent'aI3I#ti entourage 0nt2UrA:Z entrail $1 entrance $1 $onlys @@ -1763,6 +1775,7 @@ epitome I2pIt@mI epub $alt6 equal i:kw@L equation I2kweIZ@n +equilibrate $2 equipage EkwIpIdZ equivocal I2kwIv@k@L erase I2reIz // erasing erases @@ -1793,7 +1806,7 @@ ethernet $alt1 etiquette $1 ?3 etiquette EtI#k@t euclidean ju:kl'Idi:|@n -eunuch ju:m@k +eunuch ju:n@k euphemism ju:f@mIz@m eureka ju:'ri:ka# europa jU@r'oUp@ @@ -1807,6 +1820,7 @@ evenings i:vnINz evit EvI2t // inevitable exactement Egzakt@m'A~ exalt Egz'0lt +exculpate $1 excuses Ekskj'u:sI#z execute EksI2kju:t // not $2 executable $3 @@ -1819,12 +1833,15 @@ expert Eksp3:t expertise Eksp3t'i:z expletive Ekspl'i:tIv ?3 expletive EksplI#tIv +explicate $1 exploit $1 $onlys exploit $verb expo $1 exponential Eksp@n'EnS@L export $1 $onlys export $verb +expurgate $1 +extirpate $1 extract $1 $onlys extract $1 $only extract $2 $verb @@ -1858,6 +1875,7 @@ favourite feIv@-rI2t favourites feIv@-rI2ts fedora fI2d'o@r@ feisty faIsti +fellate $2 feline fi:laIn felon $alt2 feminine fEm@nIn @@ -1872,6 +1890,7 @@ ficus faIk@s fiery faI3ri ?3 filet fI2leI ?3 fillet fI2leI +filtrate $2 $verb finale fI2nA:li finance faInans $only finance $verb @@ -1894,6 +1913,7 @@ flyby flaIbaI foothold fUthoUld forage f0rI2dZ force fo@s +forearmed $2 foreknowledge $2 forensic f@rEnsIk foreshadow $2 @@ -2018,6 +2038,7 @@ gucci gu:tSi gui gu:i $onlys guinea gIni gurus gu:ru:z +?!3 gyrate $2 habitual $alt3 hacienda hA:sI'End@ @@ -2109,6 +2130,7 @@ huevo hweIvoU hula hu:l@ hullabaloo hVl@b@lu: humane $2 +hundred hVndr@d hunger hVNg3 hungover $2 hurrah h@rA: @@ -2119,6 +2141,7 @@ hussar hVz'A@ huzza h@z'A: huzzah h@z'A: hydrangea haIdr'eIndZ@ +hydrate $2 $verb hyperbola haIp'3:b@l@ hyperbole haIp'3:b@li hypercube $1 @@ -2142,6 +2165,7 @@ imagery ImIdZri imagine I2madZI2n imbecile ImbI2si:l ?3 imbecile Imb@s@L +immolate $1 impedance Imp'i:d@ns imperative Imp'Er@tIv imperfect Imp'3:fEkt @@ -2180,6 +2204,7 @@ ingenuity IndZI2n'ju:I2ti inherit Inh'ErIt // inherited innard In3d inner In3 +innervate In3:veIt innovative In@veItIv impetus Imp@t@s ?3 inquiry Inkw@ri @@ -2290,6 +2315,7 @@ laboratory la#b'0r@tri laborious $alt3 labyrinth lab3InT labyrinthine lab3'InTi:n +lactate $2 $verb lascivious $alt3 lager lA:g3 lagoon $alt3 @@ -2304,6 +2330,7 @@ lasagne lasagna $text laser $alt6 lasso las'u: ?3 lasso lasoU +latex $alt4 latrine $alt3 latte lA:t2eI ?3 launch lA:ntS @@ -2335,7 +2362,8 @@ lichen laIk@n lidar laIdA@ lien li:@n lier laI3 // outlier -ligate li:geIt +ligate $2 +?3 ligate laIgeIt lightning laItnIN lilac laIl@k lily lIli @@ -2672,6 +2700,7 @@ oppose @poUz opposer @poUz3 opus oUp@s orange 0rI2ndZ +orate $2 ordeal O@d'i@l oregano 0rIg'A:noU organelle O@g@n'El @@ -2738,6 +2767,7 @@ panache $alt3 panchakarma $alt3 $3 panchayat pa#ntSaI@t pancreas pankri@s +palpate $2 papaya pa#paI;@ papyrus pa#paIr@s parabola p@rab@l@ @@ -2843,7 +2873,8 @@ pizzeria $alt1 plaid plad ?3 plateau $2 platoon $alt3 -playtest pleItEst +playa plaI@ +playtest $alt1 plaza plA:z@ plebeian pl@b'i:@n plethora plET3r@ @@ -2851,13 +2882,14 @@ plicate $2 plumber plVm3 plus plVs pois pwA: $only -poly p0lI +poleaxe poUlaks politer p@l'aIt3 politic p0l@tIk $onlys poll poUl +poly p0lI polyamide p0lI'eImaId polyester p0lI'Est3 -polygon $alt1 +?3 polygon $alt1 polythene $1 porcelain $alt2 populace $alt2 @@ -2866,6 +2898,7 @@ portend po@t'End poseidon p@saId@n posse p0si postage poUstI2dZ +postdate $2 practise praktI2s prayer pre@ precedence prEsI2d@ns @@ -2925,6 +2958,8 @@ project pr0dZEkt $onlys project $verb promenade pr0m@n'A:d pronoun proUnaUn +propranolol proUpr'an@l0l +prostrate $2 $verb protege pr0t@ZeI ?3 protege proUt@ZeI protegé protege $text @@ -2955,6 +2990,7 @@ pythagoras paIT'ag@r@s python paIT@n pyramidal pI2r'amId@L +qua kwA: qaeda kaId@ quadrilateral $3 quash kw0S @@ -3186,6 +3222,7 @@ sciatica saI'atIk@ sclera skli@r scourge sk3:dZ ?5 scourge skVRdZ +scrapheap $alt4 scrotum skroUt@m scuba sku:b@ seabed si:bEd @@ -3347,16 +3384,18 @@ stygian stIdZi@n suave swA:v subcategory $2 // U.S ? subcontinent $2 -subject sVbdZ'Ekt $verb +// subject sVbdZ'Ekt $verb +sublevel sVblEv@L sublime $2 submenu s'Vbm,Enju: subordinate $2 +subordinate $alt1 $verb subpoena su:p'i:n@ subsequent sVbsI2kw@nt subside s@bsaId subtly sVt@lI $verbf subvocal sVbv'oUk@L -succinct s@ksINkt +succumb s@kVm sucrose su:kroUs suede sweId suerte swe@rteI // -ed, -es @@ -3371,6 +3410,7 @@ suntan sVntan suite swi:t $onlys superb su:p'3:b superfluous su:p'3:flu:@s +superheat $3 supernal su:p'3:n@L superstructure $1 supplier s@plaI3 @@ -3414,6 +3454,7 @@ tangerine tandZ@r'i:n taoiseach ti:S@x tapestry tap@stri tarantula t@rantS@l@ +tardis $alt1 tariff tarIf tase teIz taskforce t'askf,o@s @@ -3520,6 +3561,7 @@ tricycle traIsIk@L trilogy trIl@dZi trio tri:oU triplicate $alt2 +triplicate $verb trisquel trIsk'El triumphant $2 trois twA: @@ -3597,6 +3639,7 @@ useful ju:sf@L utan u:t'an utensil ju:t'Ens@L +?!3 vacate $2 vaccine $2 valet valeI ?3 valet val'eI @@ -3687,8 +3730,8 @@ whate're w02t'e@ whatsoe're w02tsoU'e@ wheelbarrow w'i:l_b,aroU ?2 wheelbarrow w#'i:l_b,aroU -whereas we@'az -?2 whereas w#e@'az +whereas we@az +?2 whereas w#e@az wherewithal we@wIDO:l ?2 wherewithal w#e@wIDO:l whew fju: @@ -3976,6 +4019,7 @@ Eyjafjalla eIja#fjatla# Faroe fe@roU Faroes fe@roUz Fermanagh f3:m'an@ +Flores flo@rIz Folkestone foUkstoUn Fuego fweIgoU Gabon gab0n @@ -4522,6 +4566,7 @@ Jesus dZi:z@s Joachim dZoU@kIm Johann joUhA#n Jonah dZoUn@ +Jolene $alt3 Jorge ho@heI José hoUs'eI Jose hoUs'eI @@ -4771,6 +4816,7 @@ Damocles dam@kli:z (da vinci) da#vIntSi Dante dA:nt2eI ?3 Datsun dA:ts@n +Degas deIgA: $capital Desiree dI2zi@reI ?3 Desiree dEz@r'eI Deslauriers dI2lo@rIeI @@ -4806,6 +4852,8 @@ Ghandhi gA:ndi Gibson gIbs@n Godzilla g0dz'Il@ Goliath $alt3 +Gogh g0x +?3 Gogh goU Grigio gri:Z'oU Guinness gInIs Gutierrez gu:tj'ErEz @@ -4832,7 +4880,8 @@ Jimenez hIm'EnEz Jonese dZoUnz // Joneses Kapoor $2 Kawasaki kaU|@s'A:ki -Kendell kEnd@L +Kendall $alt2 +Kendell $alt2 Khrushchev kru:stSEf Khruschev kru:stSEf Kroger kroUg3 @@ -4931,6 +4980,7 @@ Urquhart 3:kA@t Versace v3sA:tSi Vicodin vaIk@dI#n Volkswagen v'oUlksv,A:g@n +Vries vri:s Wegener veIg@n3 Wii wi:: Wiimote wi:moUt @@ -5159,6 +5209,7 @@ haves havz has %ha#z $pastf $only has haz $only $atend (has been) %ha#z%bIn $pastf +(has-been) hazbi:n (has to) haztu: $atend (has not) h@zn%0t $pastf (has not) ha#zn0t $pastf $atend @@ -5173,7 +5224,7 @@ had ,had $atend (had it) h,adI2t (had them) h,adDEm (had one) hadwVn $atend -(had any) h,ad||Eni +(had any) h,ad||,Eni (had some) h,ad||sVm having ,havIN $strend2 $pastf $only haven't hav@-nt $pastf @@ -5275,6 +5326,7 @@ thee Di: $u+ thou DaU thy ,DaI thine DaIn $u+ +thyself DaIs'Elf (i had) aI||h'ad $atend (he had) hi:||h'ad $atend diff --git a/dictsource/en_rules b/dictsource/en_rules index cd132d00..d7a78110 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -279,7 +279,7 @@ v) ac (a eIk ac (cent ak ac (centu %ak - accessi aks'Es@ + accessib aks'Es@b acci (_ 'A:tSi ac (cid ak acc (ol ak @@ -332,6 +332,7 @@ ach (rom ak ac (id_ as _) ac (i a#s + acial eIS@L acious 'eIS@s _) ack ak _) ack (n a#k @@ -417,6 +418,7 @@ ad (vert_ ad ad (vert a#d _) advo adv@ + _gr) ad (a eId hex) ad (e ad torn) ad eId _r) ad (L03 eId @@ -555,6 +557,7 @@ _) ai (z aI .group al + &) al (X$w_alt2++ @L _) ale (C_ alI2 @ic) al (_S2 @L _) al (@ a#l @@ -622,6 +625,7 @@ al (mig %0l _) al (ms A: &) alo (_ @loU + h) alo (gena a#l0 &) al (ous_ @l _) al (p al alpha alf@ @@ -993,6 +997,7 @@ propag) an (d 'an _n) arr (at a#r _) arr (o ar _) arro (g ar@ + arr (o_ A@ ar (i_ 'A@r ?3 @) ar (io_ 'ar _b) ar (L02t ar @@ -1006,6 +1011,7 @@ calend) ar 3 &l) ar (_ 3 &l) ar (ist 3 &m) ar (_ 3 + an) ar (_ 3 lun) ar (_ =3 _sep) ara (b 3r@ _p) ara ar@ @@ -1019,7 +1025,7 @@ calend) ar 3 &) ar (diz 3 %C) ar (d_ 3 &d) ar (d_ 3 - &h) ar (d_ 3 +// &h) ar (d_ 3 &ch) ar (d 3 &k) ar (d_ 3 ll) ar (d_ A@ @@ -1104,6 +1110,7 @@ calend) ar 3 _p) arlia A@l@ @) ar (ol @r arom (at a#roUm + &) ar (ous_ 3 arre (_ A@ arred (_ A@d arring (_ A@I2N @@ -1120,7 +1127,7 @@ calend) ar 3 ?3 ion) ary (_ Er%i XC) ary (_ e@r%i w) ar O@ - wh) ar O@ + _wh) ar O@ w) ar (r 0 w) ar (i e@ w) ar (y e@ @@ -1228,8 +1235,10 @@ calend) ar 3 w) atch 0tS _s) ata (n eIt@ _g) ator eIt3 - &) ate (_$w_alt2 @t + &) ate (_$w_alt1+ eIt + &) ate (_$w_alt2+ @t der) ated (_ eItI#d + der) ating (_ eItIN pal) ate (_ @t consul) ate (_ @t macul) ate (_ @t @@ -1244,14 +1253,11 @@ consul) ate (_ @t _it_separ) ate (_ @t par) ates (_ eIt|s ct) ate (_ =eIt - @) ated (++_ eItI#d _s) ate (ll at@ @) ati (_ 'A:ti at (im_ 'eIt - @) ating (++_ eItIN &) at (ive @t &) at (ive_$w_alt1 eIt -// &) ately (_ @tli ul) at (ory 'eIt sen) at @t pl) at (ea at @@ -1325,6 +1331,7 @@ _it_separ) ate (_ @t st) atus eIt@s ?3 st) atus at@s _) at (y eIt + &) at (y_ @t .group au au O: @@ -1737,7 +1744,8 @@ _it_separ) ate (_ @t co (mprehen k0 co (mprom k0 _) comp (tr k%0m - compu (t k%0#mpju: + co (mput k%0# + co (mputat k0 _) co (mr k0 _) con (@ k%0#n _) conce (ntra k0ns@ @@ -1778,6 +1786,7 @@ _it_separ) ate (_ @t _) co (nstip k0 _) co (nstitut k0 _) co (nsole k0 + _) co (nstel k0 _) co (nsul k0 _) co (nsult k%0# _) co (ntact k0 @@ -1785,7 +1794,7 @@ _it_separ) ate (_ @t co (ntine k0 _) co (ntour k0 _) co (ntrA k0# - _) contra (C@P6 k,0ntr@ + _) contra (@P6 k,0ntr@ _) contrast k0#ntraast contrac (t k%0#ntrak contrar k%0#ntre@ @@ -1870,15 +1879,16 @@ _it_separ) ate (_ @t _) de (ba dI2 _) de (bil dI# _) de (c@ dI# - deca (den dEk@ - _) decaffei d%i:kafI + _) deca dEk@ + _) deca ((ff d%i:ka + _) deca (nt d%Ika _) de (cL05 dE de (cenc di: de (cib dE de (cil dE de (cim dE _) de (com d,i: - _) de (con d,i: + _) de (conP2 d,i: de (cor dE de (coru dI2 de (creas di: @@ -1886,6 +1896,8 @@ _it_separ) ate (_ @t de (du dI2 _) de (emp d%i: _) de (f@ dI2 + _) de (falc di: + _) de (feca dE de (finit dE de (flat d%i: de (feren dE @@ -1895,6 +1907,8 @@ _it_separ) ate (_ @t _) de (g@ dI2 _) de (hAP2 d,i: _) de (hyd ,di: + _) de (ifL02 deI +?3 _) de (ifL02 di: _) de (ist deI _) de (j dI2 _) de (l@ dI2 @@ -1906,6 +1920,7 @@ _it_separ) ate (_ @t de (lv+ dE de (ma dI2 de (magog dE +?!3 _) de (marca di: demea dI2m'i: de (men dI2 _) de (milit d%i: @@ -1922,9 +1937,11 @@ _it_separ) ate (_ @t deni (tri d%i:naI _) de (no dI2 _) de (nu dI2 + _) de (nuda d,i: _) de (o d%i: _) de (p@ dI2 de (per d%i: + _) de (pila dE de (pol d%i: de (pop d%i: depo (siti dEp@ @@ -2022,7 +2039,7 @@ _it_separ) ate (_ @t di (scov dI2 _) dis (eP3 ,dIs di (sh_ dI - di (shC dI + _) di (shC dI _) di (shev+ dI2 _) dis (hAP3 dI2s _) dis (inP3 ,dIs @@ -2037,7 +2054,7 @@ _it_separ) ate (_ @t _) diss (@ dI2s dis (sect daI dis (sid dI - di (ssip dI + _) dis (sip dI dis (solu dI dis (son dI di (stan dI @@ -2295,6 +2312,7 @@ _it_separ) ate (_ @t cl) ed (_S1v d @p) ed (_S2vdei t @@er) ed (_S2v d + our) ed (_S2v d @ss) ed (_S2dv t @t) ed (_S2vdei I#d ?8 @t) ed (_S2vdei Ed @@ -2374,11 +2392,12 @@ _it_separ) ate (_ @t _w) eigh eI .group el - _) el (A %Il + _) el (A I#l _) electro %Il,EktroU - _) elect (rocu I2lEkt - _) elect (rol %ElEkt - _) elect (ron I2lE2kt + _) elect (rici I#lE2kt + _) elect (rocu I#lE2kt + _) elect (rol I#lE2kt + _) elect (ron I#lE2kt _) ele (g ElI _) elem ElIm _) ele (p ElI @@ -2440,6 +2459,7 @@ _it_separ) ate (_ @t em (ana Em emba (s Emb@ em (blem Em + _) em (broc Em em (bry Em em (eral Em _) em (e I2m @@ -2505,6 +2525,7 @@ _it_separ) ate (_ @t _) ener En3 g) ener (i @nEr @@th) enes (_ =@ni:z + _) en (gel En g) en (etic I2n &) en (ger In eng (lA INg @@ -2771,6 +2792,7 @@ _it_separ) ate (_ @t .group es ess (_$w_alt2 @s + &) es (X$w_alt1+ Es &) es (_S1i z &es) es (_ i:z ese (_ i:z @@ -2778,7 +2800,7 @@ _it_separ) ate (_ @t &f) es (_S1 s &k) es (_S1 s &p) es (_S1 s - &t) es (_S1 s + &t) es (_S1 z# &c) es (_S1 %Iz &g) es (_S1 %Iz &ch) es (_S1 %Iz @@ -2851,9 +2873,10 @@ _it_separ) ate (_ @t eth (ic ET _) ethno (@ ETnoU# eth (ra 'i:T - eth (yl i:T - eth (ylen ET + eth (ylK i:T +?3 ethyl (K ET@L @C) eth (_S3e @T + _) etio i:tI@ etta (_ 'Et@ ette (_ 'Et pal) ett (e @t @@ -2945,6 +2968,7 @@ _it_separ) ate (_ @t excav Eksk@v _) exc (e %Eks exc (i %Eks + _) ex (ecra Eks _) ex (crem Eks exce (llen Eks@ C) ex (e Eks @@ -2962,6 +2986,7 @@ _it_separ) ate (_ @t exped (it Eksp@d ex (pert Eks experim %EkspErIm + _) ex (piat Eks @) ex (ia 'Eks _) exi (gen EksI ss) ex (_ Iks @@ -3184,7 +3209,7 @@ _it_separ) ate (_ @t scr) i (ber aI i (ber_ aI t) ibe (t Ib'E - i (bilit I + i (bilit @ b) i (ble_ aI @) ible (_S4ev @b@L @) ibles (_S5ev @b@Lz @@ -3248,7 +3273,7 @@ _it_separ) ate (_ @t ifier (_ IfaI3 r) i (fl aI st) i (fl aI - &) ify (_ =I2faI + &) ify (_ =I#faI i (genous 'I n) ihi aI|@ _) i (h aI @@ -3293,15 +3318,15 @@ _it_separ) ate (_ @t _t) ia i:@ XC) ia (_ i@ &) iac (_ =Iak - &) ian (_S1 n - &) ians (_S2 nz + &) ian (_NS1 n + &) ians (_NS2 nz C) iar aI3 ?8 C) iar aIa# iar (iC i@3 iar (ity Iar - &) iary =j@r%I - &l) iary =i@r%I + &) iary =j@ri + &l) iary =i@ri _) ian i@n &) ia (_N =i|@ &) ia (_ =i@ @@ -3455,7 +3480,6 @@ _it_separ) ate (_ @t igno (ran Ign3 ig (na Ig _m) ig (ra aIg - _m) ig (rati %aIg igu (e 'i:g igu (_ 'i:g @@ -3643,7 +3667,9 @@ _it_separ) ate (_ @t _) in (tegri %In inte (llec Int@ _) inter (@P5 ,Int3 // prefix + _) inter (- ,Int3 _) inter (AP5 ,Int@r + _) inter (cal %Int3: _) inter (est Intr interfer Int@f'i@3 _) int (erio+ %Int @@ -3988,7 +4014,7 @@ _it_separ) ate (_ @t _) jes (ui dZEz _) jh (A@ dZ _) jiha (d dZI2hA: - _) joa (n@ dZoU'a + _) joa (nn dZoU'a n) j (a_ j j (ü j @@ -4063,12 +4089,11 @@ _it_separ) ate (_ @t &t) ling (_ _lIN &l) ling (_S4vd IN linux lInVks - listen lIs@n ?3 _) lo (gK lO @) lo (gous =l@ lu (na lu: - @) ly (_S2i l%i - @l) ly (_S2 i + &) ly (_S2i l%i + &l) ly (_S2 i f) ly (_ laI ief) ly (_S2 l%i ff) ly (_S2 l%i @@ -4079,7 +4104,7 @@ multip) ly laI &p) ly (_S2 l%i p) ly (_ laI _) ly (d lI - @) lEss (_S4i l@s + &) lEss (_S4i l@s @) lEssly (_S6i l@sl%i .group le @@ -4140,8 +4165,8 @@ multip) ly laI mbly mbl%I o) mb (e m _bo) mb (K m - _du) mb m - _) mc (C@ m@k + _du) mb (K m + _) mc (C@P2 m@k _) mc (_C m@k _) mc (_L05 m@ // c,g,k _) mc (L05@ m@ @@ -4332,6 +4357,7 @@ multip) ly laI @@C) o (_ =oU oa oU oa (_ 'oU@ + oa (b oUa g) oa (n_ oU@ z) oa (n_ 'oU@ br) oa (d O: @@ -4432,6 +4458,7 @@ multip) ly laI @l) oge (_ 0g &) o (gen_ @ ogeni (c oUdZ'EnI + o (genat '0 o (genous '0 o (geny '0 r) o (ger 0 @@ -4468,7 +4495,7 @@ multip) ly laI orp) oise @s o (ism oU @) o (ist oU - oix (_ wa + oix (_ wA: tr) o (jan oU o (ku oU o (ky_ oU @@ -4594,7 +4621,7 @@ multip) ly laI &) om (ise_ =@m &) om (ize_ =@m @) om (ist_ =@m - _s) om (n %0m + _s) om (na %0m _) omni (@@P4 ,0mnI2 _) omni 0mnI _) omnipo 0mn'Ip@ @@ -4830,7 +4857,7 @@ multip) ly laI _f) ore (tel %o@ @) or (iti 0r @) or (ity 0r - _fav) orit 3I#t + _fav) orit @-rI#t _) or (iC 0r @t) ore (_ 3 st) ore (_ o@ @@ -4842,7 +4869,7 @@ multip) ly laI ?!3 _h) or (o 0r orr (_ o@ or (r 0 -?3 or (r O: +?3 or (r O@ bb) or (n 3 f) oreign 0r@n f) or (ever 3 @@ -4932,11 +4959,11 @@ multip) ly laI &g) ot (_ @t &rr) ot (_ @t &) ot (_$w_alt2 @t - n) ot (a oUt r) ot (a oUt t) ot (a oUt c) ot (an oUt ot (at oUt + nn) ot (at @t h) ote (l %oUtE p) ot (enti @t b) oth oUT @@ -5027,7 +5054,6 @@ multip) ly laI c) ou (pl V &) our (_ 3 np) our (_ o@ - &) oured 3d ev) our (ed aU@ our (n 3: ?5 our (n VR @@ -5256,6 +5282,7 @@ multip) ly laI _) peregrin pEr@grIn per (fec p3 _) per (iC@@ p,Er + _) per (igr pEr _) perini pErIn'i: _) per (iph p3r _) per (isc pEr @@ -5390,6 +5417,7 @@ multip) ly laI _) pro (sa pr@ _) pro (sc pr@ pro (spectA pr@ + _) pro (stra pr0 _) pro (sumer pr%oU pro (tec pr@ pro (test pr@ @@ -5500,6 +5528,7 @@ multip) ly laI _) re (arm %ri: _) re (au@P2 ,ri: re (ck rE + _) re (clina rE reco (g rEk@ _) re (comP2 r,i: _) re (conP2 ,ri: @@ -5562,6 +5591,7 @@ multip) ly laI repe (titiv rI2pE re (pli rE re (prim rE + _) re (prob rE re (pt rE _) re (puta rE re (quis rE @@ -5749,6 +5779,7 @@ multip) ly laI 1_) st (_ _) st (_ s@nt stein staIn + i) st (en_ s _) s (u s &) s (u_ =s ssue Su: @@ -5760,7 +5791,7 @@ multip) ly laI Ai) s (y z s (_N z @) s (_NS1m z - @) s (_$w_alt1S1 s + @) s (_$w_alt1 s _BA) s (_N s &se) s (_S1 I#z &sse) s (_S2 I#z @@ -5806,8 +5837,8 @@ multip) ly laI su (burba s@ su (bv s@ substa (nt s@bsta - su (ccA s@ - su (ccul sV + su (cce s@ + su (cci s@ su (ffic s@ sugar SUg3 re) su (mA zju: @@ -5856,6 +5887,7 @@ multip) ly laI _) tz (ar ts t (h$w_alt4 t t (A$w_alt4 t2 + t (E$w_alt4 t2 t (ap_ t2 ie) t (ary_ t2 @@ -5875,6 +5907,7 @@ multip) ly laI t (op_ t2 @) town (_S4 t2aUn tow (er t2aU + _) trans (migP5 trans _) trans (nP5 trans _) tri (A traI _) trie traI @@ -5969,12 +6002,12 @@ multip) ly laI theo (logy TI'0 theo (logis TI'0 _) th (eC% T + _) th (us D .group ti &) tia (_ S@ &s) tia (_ tS@ - propi) ti (a tI ti (ac tI &) tian (_ =S@n &s) ti (an_ tS @@ -5998,6 +6031,7 @@ multip) ly laI tion (ality S@n &) tious S=@s AC) tive (_ =tIv + _) ti (trat t%aI .group tu @@ -6116,7 +6150,7 @@ contin) u ju: _) u (lA u: &f) ul (_ @L ?8 &f) ul (_ Vl - s) ul (_ @L + &s) ul (_ @L @) u (la_ =jU @) u (lar =jU @) u (late =jU @@ -6369,6 +6403,7 @@ contin) u ju: v v v (v _) v (la v + _) vr (A vr @) va (len veI _) vehem vi@m @@ -6444,8 +6479,7 @@ contin) u ju: xis (_ =ksIs xus (_ =ks@s xu (a =kSu: - lu) x (ur gZ -?3 lu) xu (r gZU@ + lu) xu (r gZU@ xure (_ kS%U@ .group y diff --git a/dictsource/eu_list b/dictsource/eu_list index a70d33bc..970872a7 100644 --- a/dictsource/eu_list +++ b/dictsource/eu_list @@ -1,132 +1,190 @@ - -// This file is UTF8 encoded -// Spelling-to-phoneme words for Basque - -b be -c ze -d de -f efe -g ge -h atSe -j xota -k ka -l ele -m eme -n ene -ñ en^e -p pe -q ku -r eR2e -s ese -t te -v uBe -w uBe||bikoitza -x iSa -y i||grekoa -z zeta - -_a a -_e e -_i i -_o o -_u u - - -// numbers -_0 zer'o -_1 b'at -_2 b'i -_3 hir'u -_4 l'aU -_5 b'ost -_6 s'eI -_7 zazp'i -_8 zort'i -_9 beD'eratzi -_10 am'aR2 -_11 am'aIka -_12 amaB'i -_13 ama'ir,u -_14 amal'aU -_15 amaB'ost -_16 amas'eI -_17 amazazp'i -_18 emezort'i -_19 emeretz'i -_20 hoQ'eI -_2X hoQ'eIta -_40 b'eR2oQeI -_4X b'eR2oQeIta2 -_60 ir'uroQeI -_6X ir'uroQeIta2 -_80 l'aUroQeI -_8X l'aUroQeIta2 -_1C e'un -_2C b'eR2eun -_0C R2e,un -_0M1 mil'a -_0M2 mil^'i;oI -_0and eta -_dpt _koma - - -// names of punctuation and symbol characters - - - -// functuion words -// conjunctions -eta $u+ $pause // and -bainan $pause - - -// pronouns -ni $u+ -zu $u+ -hura $u+ -gu $u+ -zuek $u+ -haiek $u+ - -nire $u+ // possessive -zure $u+ -haren $u+ -bere $u+ -gure $u+ -zuen $u+ -haien $u+ -beren $u+ - -hau $u+ // this -hori $u+ // that -hura $u+ // that (further) - -// auxillary verbs -izan $u // to be -naiz $u -zara $u -da $u -gara $u -zarete $u -dira $u - -egon $u // to be -nago $u -zaude $u -gaude $u -zaudete $u -daute $u - - -// gramatical suffixes which can appear as words appended to numbers etc. -// Should these be in eu_rules ?? -a $u -an $u -ean $u -eko $u -era $u -ko $u - - -etxe $1 $only - + +// This file is UTF8 encoded +// Spelling-to-phoneme words for Basque + +b be +c ze +d de +f 'efe +g ge +h 'atSe +j J'ota +k ka +l 'ele +m 'eme +n 'ene +ñ 'en^e +p pe +q ku +r 'eR2e +s 'ese +t 'te +v 'uBe +w 'uBe||bikoitza +x 'iSa +y i||gr'ekoa +z 'z'eta + +_a a +_e e +_i i +_o o +_u u + + +// numbers +_0 zer'o +_1 b'at +_2 b'i +_3 'iru +_4 l'aU +_5 b'ost +_6 s'eI +_7 z'azpi +_8 z'ortzi +_9 beD'eratzi +_10 am'aR2 +_11 am'aIka +_12 am'aBi +_13 am'aIru +_14 am'alaU +_15 am'aBost +_16 am'aseI +_17 am'azazpi +_18 em'ezortzi +_19 em'eretzi +_20 oQ'eI +_2X oQeIta +_40 beR2oQ'eI +_4X beR2oQeIta +_60 iruroQ'eI +_6X iruroQeIta +_80 laUroQ'eI +_8X laUroQeIta +_1C e'un +_2C beR2'eun +_3C ir'ureun +_4C laur'eun +_5C bost'eun +_6C sei'eun +_7C zazp'ieun +_8C zortz'ieun +_9c bederatz'ieun +_0C e,un +_0M1 m'il^a +_0M2 mil^'ioI +_1M2 mil^'ioI||bat +_0and eta +_dpt _koma + + +// names of punctuation and symbol characters +_. p'untu +_, k'oma +_- gid'oI +_! arr'idura +_? gald'era +_: b'i||p'untu +_; p'untu||eta||k'oma + +// functuion words +// conjunctions +eta $u+ $pause // and +baina $u+ $pause + +// pronouns +ni $1 +zu $1 +hura $1 +gu $1 +zuek $1 +haiek $1 +nire $u+ +zure $u+ +haren $u+ +bere $u+ +gure $u+ +zuen $u+ +haien $u+ +beren $u+ + +hau $1 // this +honen $1 +hauen $1 +hori $1 // that +horren $1 // genitive +hura $1 // that (further) +haien $1 // genitive + +// Some auxiliary verbs +gara $2 +zara $2 +dira $2 + +// gramatical suffixes which can appear as words appended to numbers etc. +// Should these be in eu_rules ?? +a $u +ak $u +an $u +ean $u +etan $u +eko $u +etarako $u +ko $u +era $u +ra $u +etara $u + + +// Other words (mostly nouns) + +// Bisillabic words which have the stres always in the first syllable +kaixo $1 +testu $1 +lehia $1 +patu $1 + +// Bisillabic words whitch get misspronounced with the suffix list +etxe $1 $only +kale $1 $only +aste $1 $only +urte $1 $only + +// j as [x] +jipoi x'ipoi + +// other + +aerobiko $3 +aerodinamiko $5 +aerodinamika $5 +aerodromo $3 +aerometro $3 +aeromodelismo $6 +aeronauta $4 +aeronautika $4 +aeronautiko9 $4 +aerosol $4 +aerostatika $4 +aerostato $4 +adrenalina adrenalin2a +aharraus $2 +aharrausika $2 +ahur aur $only +ahurr auR2 + +// Abbreviations +adib ad'ibidez $hasdot + +// proper names and surnames +juan xw'an +jorge x'orxe +jose x'ose +josé x'os'e +joaquín xoak'in +san $u +santo $u +aristoteles $3 +hume x'iUm +nietztsche n'itSe +abako $1 diff --git a/dictsource/eu_rules b/dictsource/eu_rules index 0db9256f..827b4ca9 100644 --- a/dictsource/eu_rules +++ b/dictsource/eu_rules @@ -1,147 +1,250 @@ +// This file is UTF8 encoded +// Spelling-to-phoneme rules for Basque + +.L01 b d g +.L02 e i + + +.group a + a a + ai aI + ahi aI + au aU + ahu aU + a (_S1t a + ak (_S2t ak + ari (_S3t ari + aren (_S4t a**en + arekin (_S6t a**ekin + arentzat (_S8t a**entzat + arentzako (_S9t arentzako + an (_S2t an + atik (_S4t atik + ara (_S3t a**a + arat (_S4t arat + atatik (_S6t atatik + atara (_S5t ata**a + atarat (_S5t atarat + ako (_S3t ako + atako (_S5t atako + araino (_S6t a**ain^o + ataraino (_S8t ata**an^o + arantz (_S6t a**antz + atarantz (_S8t a**antz + agana (_S5t agana + arengana (_S8t a**engana + arenganaino (_s11 a**enganain^o + arengatik (_S9t a**engatik + atzat (_S5t atzat + + -// This file is UTF8 encoded -// Spelling-to-phoneme rules for Basque +.group b + b b + _ez_) b (A p' + +.group c + c k + c (L02 T + + -.group a - a a - ai aI - au aU +.group d + d d + dd J + A) d (A D // ?? + _ez_) d (A t' + + + +.group e + e e + ei eI + ehi eI + l) ehi (A eI + eu eU + ek (_S2t ek + ei (_S2t eI + en (_S2t en + ean (_S3t ean + etan (_S4t etan + etatik (_S6t etatik + etara (_S5t eta**a + erat (_S4t erat + etako (_S5t etako + eko (_S3t eko + etarako (_S7t etarako + etarantz (_S8t eta**antz + etaraino (_S8t eta**aino + engana (_S6t engana + entzat (_S6t entzat + entzako (_S7t entzako + engatik (S7 engatik + ekin (_S4t ekin + ekiko (_S5t ekiko + ez (_S2t ez + etaz (_S4t etaz + + -.group b - b b +.group f + f f + + +.group g + g g + A) g (A Q // ?? + _ez_) g (A k' + gana (_S4t gana + go (_S2t go + -.group c - c k - c (e s - c (i s +.group h + h // silent + zi) h (o x + + +.group i + i i + K) i (_S1t i + ad) i (eraz j + le) i (h j + arraz) i (on j + -.group d - d d - Ki) d (A J - dd J - A) d (A D // ?? +.group j + j J // try [x] [J] [j] [J^] [Z] [S] + ad) j (udika x + + +.group k + k k + ko (_S2t ko + + +.group l + l l + ll l^ + _ez_) l (A l' + +.group m + m m + + -.group e - e e - ei eI - eu eU +.group n + n n + n (_S1t n +adrenali) n n2 + admi) n (istr n2 + - &) ek (_S2 ek - +.group o + o o + oi oI + + -.group f - f f +.group p + p p + + +.group q + q k + + -.group g - g g - A) g (A Q // ?? +.group r + r r + _) r R2 + rr R2 + A) ri (_S2t ri + ren (_S3t ren + ra (_S2t ra + rat (_S3 t rat + rantz (_S5t rantz + raino (_S5t raino + rako (_S4t rako + rentzat (_S7t rentzat + rentzako (_S8t rentzako + rekin (_S5t rekin + rengan (_S6t rengan + rengana (_S7t rengana + rengandik (_S9t rengandik + rengatik (_S8t rengatik + + +.group s + s s + + -.group h - h // silent +.group t + t t + ts ts + tt c + tx tS + tz tz + tan (_S3t tan + tara (_S4 t tara + tarat (_S5t tarat + tik (_S3t tik + tatik (_S5t tatik + taz (_S3t taz + tu (_S2t tu + tuko (_S4t tuko + tzen (_S4t tzen + ten (_S3t ten + + +.group u + u u + + -.group i - i i +.group v + v b + + +.group w + w u + + -.group j - j J // try [x] [J] [j] [J^] [Z] [S] +.group x + x S + + +.group y + y jj + -.group k - k k - - -.group l - l l - ll l^ - Ki) l (A l^ - - -.group m - m m - - -.group n - n n - Ki) n (A n^ - - -.group ñ - ñ n^ - - -.group o - o o - oi oI - - -.group p - p p - - -.group q - q k - qu kw - que (_ k - - -.group r - r r - _) r R2 - r (_ R2 - rr R2 - - -.group s - s s - - -.group t - t t - Ki) t (A c - ts ts - tt c - tx tS - tz tz - - -.group u - u u - - -.group v - v v - - -.group w - w w - - -.group x - x S - - -.group y - y j - K) y (K i - - -.group z - z z - - - -.group - ç s - ü Y +.group z + z z + _e) z (_L01 %z + _e) z (_l + z (_S1t z + +.group + á ''a + é ''e + í ''i + ó ''o + ú ''u + ç s + ü Y + ñ n^ + diff --git a/dictsource/pl_rules b/dictsource/pl_rules index 873545cb..1f83040b 100644 --- a/dictsource/pl_rules +++ b/dictsource/pl_rules @@ -81,7 +81,7 @@ .group c c ts - ch h + ch x ch (i C chi (A hj psy) chi (a hi diff --git a/dictsource/pt_list b/dictsource/pt_list index 1a9f0859..269148f4 100644 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -120,6 +120,11 @@ _− m'enUs ½ m'eIU ¾ tRes#kw'a*@-tUs# ® xeZistR'adU +↑ s'Et&as'im& +↓ s'Et&ab'aISU +← s'Et&aes#k'e*@-d& +?2 → s'Et&adZi*eIt& + ?1 ™ m'a*@-k&xeZiSt'ad& ?2 ™ m'a*@-k&xeZistR'ad& _, v'irgul& @@ -694,14 +699,18 @@ ampola $alt2 ampulheta $alt2 anchova $alt2 andorra $alt2 +andrea $alt +andreia $alt antonieta $alt2 apego $alt2 $noun apelo $alt2 $noun apelos $alt2 aposto $alt $verb aperto $alt2 $noun +apertos $alt2 apneia $alt apoio $alt $verb +aqueia $alt arredores $alt arremesso $alt2 $noun arrocho $alt2 $noun @@ -722,9 +731,12 @@ açores $alt2 bairro b'aIxU baitola $alt2 balancete $alt2 +bangladesh $alt banquete $alt2 barreto $alt2 +basileia $alt bastonete $alt2 +baviera $alt beco $alt2 besta $alt2 beça $alt @@ -753,14 +765,17 @@ broto $alt2 $noun buceta $alt2 cabresto $alt2 cacete $alt2 +cacoete $alt2 caderneta $alt2 cadete $alt2 caibro k'aIbRU cãibra k'&~IbR& caixeta $alt2 +caldeia $alt camelha $alt camiseta $alt2 canaleta $alt2 +cananeia $alt canhoto $alt2 capacete $alt2 caractere $alt @@ -775,18 +790,16 @@ catequeses $alt catorze $alt2 cavalete $alt2 cebola $alt2 -cedro $alt cefaleia $alt centopeia $alt cerebelo $alt2 cerca $alt $verb cerco $alt $verb cetro $alt -chamego $alt2 $verb -chamegos $alt2 +chamego $alt2 +chamego $alt $verb chapeleta $alt2 chaveta $alt2 -chefe $alt choco $alt2 $noun choça $alt chofer $alt @@ -823,7 +836,6 @@ controles $alt2 controles $alt $verb controlo $alt2 $noun conveses $alt -copta $alt coreia $alt cores $alt2 cores $alt $verb @@ -835,8 +847,10 @@ coro $alt $verb corpete $alt2 corpos $alt corto $alt +corveia $alt corveta $alt2 corvos $alt +cosme $alt costeleta $alt2 coto $alt2 cotovelo $alt2 @@ -844,11 +858,14 @@ cozem $alt cratera $alt crede $alt2 credo $alt +crimeia $alt +decoreba $alt decoro $alt2 $noun degelo $alt2 desaforo $alt2 desamores $alt2 -desapego $alt2 $noun +desapego $alt2 +desapego $alt $verb desassossego $alt2 $noun desconfortos $alt2 desconsolo $alt2 $noun @@ -857,6 +874,7 @@ descordo $alt descorno $alt desemprego $alt2 desemprego $alt $verb +desenvolto $alt2 desespero $alt2 desespero $alt $verb desfecho $alt2 @@ -869,6 +887,8 @@ desse $alt2 desse $alt $verb deste $alt2 deste $alt $verb +destempero $alt2 $noun +destemperos $alt2 desterro $alt2 destroem $alt deteriore $alt @@ -892,7 +912,8 @@ doso $alt doze $alt2 dueto $alt2 edson $alt -elixir eliSir +egeia $alt +eleia $alt emborco $alt emprego $alt2 emprego $alt2 $noun @@ -900,6 +921,7 @@ encasqueta $alt encosto $alt $verb endereço $alt $verb endoide $alt2 +eneias $alt enforco $alt engodo $alt2 engordo $alt @@ -976,6 +998,7 @@ força $alt $verb forço $alt formos $alt2 forro $alt $verb +fosso $alt2 frescores $alt2 frevo $alt2 fulgores $alt2 @@ -993,7 +1016,6 @@ gesso $alt2 gloso $alt gonorreia $alt gol gow -golpe $alt gorda $alt2 gorjeta $alt2 gororoba $alt @@ -1003,6 +1025,7 @@ gota $alt2 governo $alt2 governo $alt $verb gozo $alt2 $noun +gozos $alt2 graveto $alt2 groselha $alt grosso $alt2 @@ -1028,6 +1051,7 @@ jogo $alt $verb jogos $alt joguete $alt2 judeia $alt +jurubeba $alt lacerda $alt lagosta $alt2 lambreta $alt2 @@ -1043,13 +1067,11 @@ lopes $alt lutero $alt macete $alt2 maioneses $alt -manopla $alt maniçoba $alt marieta $alt2 mariposa $alt2 megera $alt melhor $alt -menor $alt meta $alt $noun metro $alt minueto $alt2 @@ -1064,7 +1086,6 @@ moem $alt mofo $alt $verb mogno $alt molho $alt2 $noun -monera $alt montenegro $alt2 mor $alt morcego $alt2 @@ -1077,6 +1098,7 @@ namoro $alt2 $noun naquela $nounf naquele $alt2 $nounf nervo $alt2 +niceia $alt ninfeta $alt2 nitreto $alt2 nojo $alt2 @@ -1097,8 +1119,11 @@ pacheco $alt2 paexa paeSa paella pa'el^& palacete $alt2 +palermo $alt +palimpsesto $alt2 palheta $alt2 palhoça $alt +panaceia $alt pangeia $alt pantera $alt papoco $alt2 $noun @@ -1106,7 +1131,7 @@ paradoxo $alt parede $alt2 pateta $alt peba $alt -pedra $alt +pedro $alt2 peixoto $alt2 pela $alt2 pelo $alt2 @@ -1120,6 +1145,7 @@ pesadelo $alt2 peses $alt peseta $alt2 peso $alt $verb +pigmeia $alt piloto $alt2 $noun pilotos $alt2 pior $alt @@ -1130,6 +1156,7 @@ plebeia $alt poderem $alt2 polca $alt pompeia $alt +popa $alt2 porcos $alt porque $alt2 porra $alt2 @@ -1153,6 +1180,7 @@ quitinete $alt quinteto $alt2 ramalhete $alt2 rancores $alt2 +ranheta $alt2 raposa $alt2 recomeço $alt $verb reconstroem $alt @@ -1228,10 +1256,10 @@ sulfureto $alt2 super s'Uper suporto $alt suor suOr -tabefe $alt tambores $alt2 tapera $alt tapete $alt2 +tebas $alt temores $alt2 tempero $alt2 $noun tenores $alt2 @@ -1249,6 +1277,7 @@ torno $alt $verb tornozelo $alt2 torre $alt2 $noun torres $alt2 +torreta $alt2 torro $alt toso $alt totens $alt @@ -1264,6 +1293,7 @@ tropa $alt tropeço $alt2 $noun trombeta $alt2 ureia $alt +uretra $alt vanessa $alt2 vareta $alt2 vera $alt @@ -1277,7 +1307,6 @@ voga $alt voice $alt xarope $alt xereta $alt2 -xerox S'E*Oks xeroxes $alt zelo $alt2 $noun zorra $alt2 @@ -1314,7 +1343,7 @@ doc d'Ok ?2 designer dez'aIner ?2 designers dez'aIners ?2 desktops deskt'Ops -dj d,i:dZ'eI +?1 dj d,i:dZ'eI ?2 diesel dZ'izEU ?2 doha d'ox& ?1 down d'a,wn @@ -1349,6 +1378,7 @@ get gEt ?1 hardware 'ard,w'Er- ?2 hardware h'ardwe@- happy x'Epy +?2 haxixe xaS'iSy ?1 home 'omy ?2 home h'owmi hot xOt @@ -1424,9 +1454,10 @@ upgrade &pgR'eId upload &pl'oud ?2 web w'Eb writer r'aIter +xerox S'E*Oks ?1 yahoo 'i,ah'u ?2 yahoo iah'u -?1 yes j'Es +yes j'Es // common person names @@ -1470,7 +1501,6 @@ mac mEk ?2 microsoft m'aIkRows'Oft ?1 movie m'uvi ?1 nero n'Eru -?2 nero n'ErU ?2 netbooks nEtbUks ?2 notebook nowtbUk ?2 notebooks nowtbUks diff --git a/dictsource/pt_rules b/dictsource/pt_rules index 6d4a4910..a0b9e889 100644 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -1,4 +1,4 @@ - // translation rules Brazilian + // translation rules Brazilian // This file is UTF-8 encoded // Options @@ -22,6 +22,7 @@ .L05 r ra ram re rem rde rmo .L06 r ra ram ste sse ssem re rem rmo .L07 sse ssem ste +.L08 a o .group a @@ -201,7 +202,7 @@ e (dL02_ E - e (fa_ E + e (fL04_ E e (gL04_ E @@ -218,16 +219,16 @@ ib) e (rL04_ E d) e (rL04_ E + eb) e (L07_ e // recebeste, etc. ed) e (rL04_ e + eg) e (L07_ e // elegeste, etc. + _@o) e (L07_ e // doeste, etc. iv) e (rL04_ E pod) e (rA_ e - @s) e (L05_ E - - p) e (rL04_ E - f) e (rL04_ E - + n) e (rL04_ E + p) e (rL04_ E e (quL02_ E e (rbL04_ E e (rgL04_ E @@ -241,19 +242,12 @@ ?2 ee (C_ i ?2 C) e (em_ e e (stL04_ E - e (strL04_ E - e (rme_ E - e (rnL04_ E - e (rtL04_ E - e (rrL04_ E - e (rvL04_ E - e (tL04_ E m) e (tL03_ e An) e (tA_ e @@ -345,6 +339,7 @@ ef) e (tuL02_ e t) e (tra E + e (drL04_ E âC) e (C@ e âCC) e (C@ e @@ -357,6 +352,7 @@ éCC) e (CA_ e éCCC) e (C@ e ?2 íC) el (_ eU + í) e (C@ e íC) e (C@ e íCC) e (C@ e óC) e (C@ e @@ -375,6 +371,8 @@ _pud) e (L05_ E _exag) e (L05_ E _mulh) e (L05_ E +_chancel) e (L05_ E + vi) e (L05_ E _talh) e (L05_ E _troux) e (L05_ E @m) e (L06_ e // temeram, etc. @@ -384,19 +382,15 @@ _troux) e (L05_ E diss) e (L06_ E // contra- romp) e (L06_ e // cor- inter- _houv) e (L06_ E -_escond) e (L06_ e -respond) e (L06_ e + sCond) e (L06_ e // esconderam, etc. constrang) e (L07_ e - eb) e (L07_ e // recebeste, etc. - eg) e (L07_ e // elegeste, etc. - _@o) e (L07_ e // doeste, etc. _cr) e (L07_ e _dev) e (L07_ e bat) e (L07_ e // re- com- ced) e (L07_ e // pro- con- su- met) e (L07_ e // meteste, cometeste, etc. mex) e (L07_ e - _requer) e (L07_ e +_requer) e (L07_ e prouv) e (L07_ e mov) e (L07_ e // re- co- olv) e (L07_ e // devolveste, etc. @@ -408,8 +402,8 @@ precav) e (L07_ e _coz) e (L07_ e _val) e (L07_ e colh) e (L07_ e // & es- - _lamb) e (L07_ e -_prov) e (L07_ e + _lamb) e (L07_ e + _prov) e (L07_ e ench) e (L07_ e // pre- vert) e (L07_ e // in- re- con- ergu) e (L07_ e @@ -427,11 +421,12 @@ _troux) e (L07_ E _amanc) e (bL03_ E qu) e (brL04_ E _perp) e (trL04_ E - _assev) e (rL04_ E + sev) e (rL04_ E _imp) e (trL04_ E cel) e (brL04_ E _sop) e (sL04_ E _C) e (bre_ E + _barb) e (tA_ e _boch) e (chL04_ e _ex) e (crL04_ E impr) e (gnL04_ E @@ -440,56 +435,47 @@ _amanc) e (bL03_ E _sob) e (rbL03_ e _pr) e (dL03_ E _arr) e (dL03_ E -_emp) e (drL03_ E -_enc) e (dL03_ E -_api) e (dL03_ E + _enc) e (dL03_ E + _api) e (dL03_ E _depr) e (dL03_ E _hosp) e (dL03_ E _enver) e (dL03_ E - _) e (dnL03_ E - _gr) e (gL03_ e - _gal) e (gL03_ e -_alvin) e (grL03_ e + _) e (dnL08_ E + _gr) e (gL08_ e + _gal) e (gL08_ e _lanc) e (tA_ e menorr) ei (a_ EI - _pel) e (gL03_ e - _n) e (grL03_ e + _pel) e (gL08_ e + n) e (grL08_ e estr) ei (L04_ EI _confed) e (rL04_ E _r) e (jL03_ E _inv) e (jL04_ E _panfl) e (tL04_ e - _v) e (lhL03_ E + _v) e (lhL08_ E _gr) e (lhL04_ E -_tataran) e (tA_ E -_tetran) e (tA_ E - _trin) e (tA_ E +_tataran) e (tL08_ E +_tetran) e (tL08_ E + _trin) e (tL08_ E _caC) e (lo_ e - _porr) e (tA_ e + _porr) e (tA_ e _livr) e (tA_ e ?2 el (ton_ 'EU ad) e (quL04_ E _ing) e (rL02_ E _dig) e (rL02_ E _m) e (rL03_ E - _sev) e (rL03_ E _reit) e (rL04_ E - _sinc) e (rL03_ E + _sinc) e (rL08_ E _g) e (rL04_ E _z) e (rL04_ E qu) e (rL04_ E // re- - _on) e (rL04_ E - gen) e (rL04_ E // de- re- _alt) e (rL04_ E _enc) e (rL04_ E _esm) e (rL04_ E - _esm) e (rL04_ E - _min) e (rL04_ E _sug) e (rL04_ E _tol) e (rL04_ E - _ven) e (rL04_ E acel) e (rL04_ E // des- - eson) e (rL04_ E _apod) e (rL04_ E _enum) e (rL04_ E _exub) e (rL04_ E @@ -497,23 +483,21 @@ _adult) e (rL04_ E _aglom) e (rL04_ E _dilac) e (rL04_ E _encarc) e (rL04_ E -_incin) e (rL04_ E -_persev) e (rL04_ E _refrig) e (rL04_ E _c) e (rcL02_ E _ex) e (rcL02_ E _alic) e (rcL02_ E - _esqu) e (rdL03_ e + _esqu) e (rdL08_ e _C) e (rdL04_ E _des) e (rdL04_ E - _oblit) e (rL04_ E +_oblit) e (rL04_ E s_colh) e (res_ E _) e (rgL03_ e _re) e (rgL03_ e _so) e (rgL03_ e sp) e (rma_ E e (rquL02_ E - _bez) e (rrL03_ e + _beC) e (rrL08_ e v) e (rtL03_ e // con- re- in- _f) e (rvL03_ e _alic) e (rçL03_ E @@ -525,7 +509,7 @@ s_colh) e (res_ E _p) e (scL03_ E _m) e (sclL04 E dioc) e (ses_ E - _aust) e (rA_ E + _aust) e (rL08_ E _d) e (spL02_ E proc) e (ssL02_ E _p) e (squL02_ E @@ -535,20 +519,20 @@ s_colh) e (res_ E _ac) e (ssL02_ E _esp) e (ssL03_ e _c) e (stL03_ e - _pr) e (tL03_ e + _pr) e (tL08_ e _rem) e (tL03_ e _derr) e (tL03_ e -_obsol) e (tL03_ e +_obsol) e (tL08_ e _bol) e (tL04_ e _CaC) e (ta_ e _minu) e (tA_ e _terc) e (tA_ e viol) e (ta_ e _Carr) e (ta_ e - _Gur) e (ta_ e + _Gur) e (ta_ e _pen) e (trL04_ E _sol) e (trL04_ E - _n) eu (trL03_ 'eU + _n) eu (trL08_ 'eU _d) e (vL03_ e scr) e (vL03_ e // e- in- pre- ree- de- _atr) e (vL03_ e @@ -632,7 +616,7 @@ _redar) gu (A gw san) gu (ín gw san) gu (in gw stin) gu (A gw - _un) gu (ento_ gw + _un) gu (ento_ gw xtin) gu (A gw ?1 n) gu (A gw // eg: língua, etc. ?1 man) gu (ei g // mangueira @@ -891,6 +875,7 @@ _redar) gu (A gw b) o (rL04_ O o (p_ O C) o (pL04_ O + o (pCL04_ 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. @@ -920,16 +905,16 @@ _redar) gu (A gw //sort _f) o (L05_ o _red) o (L05_ O -_pormen) o (L05_ O + men) o (L05_ O _f) o (L07_ o _s) o (bL02_ O _af) o (bL04_ O _esn) o (bL04_ O _engl) o (bL04_ O - _sal) o (brL03_ o - _) o (cL03_ o - _barr) o (cL03_ o - _ch) o (chA_ o + _sal) o (brL08_ o + _) o (cL08_ o + _barr) o (cL08_ o + _ch) o (chL08_ o _m) o (chA_ o _f) o (dL01_s o _ecl) o (dL03_ o @@ -944,7 +929,7 @@ _pormen) o (L05_ O _ap) oi (L02_ OI _b) oi (L04_ OI _C) oi (ce_ oI - _t) o (lL03_ o + _t) o (lL08_ o _f) o (lgL04_ O _emp) o (lgL04_ O _arr) o (lhL03_ O @@ -953,13 +938,10 @@ _pormen) o (L05_ O _) o (bstL04_ O m) o (lhL04_ O emb) o (lsL04_ O - _env) o (ltL03_ o + _env) o (ltL08_ o _esC) o (pA_ o - antr) o (pL03_ o - _s) o (prL04_ O - _al) o (prL04_ O - _ass) o (prL04_ O - _) o (ptL04_ O + g) ol (pe_ Ow + antr) o (pL08_ o flex) o (rA_ p) o (rL02_ o _dev) o (rL02_ O @@ -1004,13 +986,14 @@ _pormen) o (L05_ O ?1 ovos (_G Ov=UZ novos, povos, etc. ?2 ovos (_G Ov=Uz novos, povos, etc. ortos (_ O*@-t=Us# // tortos, mortos, etc. - _Gar) o (tL03_ o - _escr) o (tL03_ o + _Gar) o (tL08_ o + _escr) o (tL08_ o zig) o (to_ o _ch) o (vL01_ o pr) o (vL03_ O _Com) o (do_ o -_ortod) o (xL03_ O +_ortod) o (xL08_ O + _arr) ox (A OS _g) o (zL04_ O _alm) o (çL01_ O _esb) o (çL01_ O @@ -1019,7 +1002,7 @@ _ortod) o (xL03_ O _ad) o (çL03_ O _emp) o (çL03_ O _end) o (çL03_ O - _c) o (çL03_ O + _c) o (çL03_ O //endsort .group ô @@ -1229,11 +1212,9 @@ _ortod) o (xL03_ O .group x x (A S A) x (A ks + e) x (A ks _e) x (A z _ê) x (A z - _ine) x (A z - _ine) x (orAC ks - e) x (A ks ?1 e) x (CA S ai) x (A S ei) x (A S @@ -1254,7 +1235,6 @@ _ortod) o (xL03_ O xA) x (A S _abaca) x (i S ale) x (a S - _arro) x (e S _ave) x (A S bau) x (A S brA) x (A S @@ -1263,6 +1243,7 @@ _abaca) x (i S _ca) x (A S _co) x (A S _coe) x (A z + _eli) x (ir S _esdrA) x (ul S _e) x (u_ S _fa) x (i S @@ -1270,6 +1251,8 @@ _esdrA) x (ul S gra) x (A S _he) x (A z ?2 _he) x (A ks + _ine) x (A z + _ine) x (orAC ks _lagarti) x (A S _li) x (A S _lu) x (A S diff --git a/dictsource/ta_list b/dictsource/ta_list index 79e35808..5f48c492 100644 --- a/dictsource/ta_list +++ b/dictsource/ta_list @@ -304,6 +304,7 @@ _#-லும் ilUm // English words tamil தமிழ் $text +andagakavi அந்தகக்கவி $text // exceptions diff --git a/dictsource/ta_rules b/dictsource/ta_rules index 0e4a3500..6b5b9685 100644 --- a/dictsource/ta_rules +++ b/dictsource/ta_rules @@ -4676,6 +4676,7 @@ _மைக்ரோசா) ப் (ட f _ஹ) ப்ப (ர்ட bbV _துர்) ப்ப (ல bbV _முழு) ப்ப (ல bbV +_மனோ) ப்ப (ல bbV உ) ப்ப (லா bbV உ) ப்ப (லாக bbV உ) ப்ப (லான bbV @@ -4718,6 +4719,7 @@ _வெளி) ப்பி (ரகார pp _சுக) ப்பி (ரச pp அதிக) ப்பி (ரசங்க pp _மலை) ப்பி (ரசங்க pp + _மலை) ப்பி (ரசங்க pp _சண்ட) ப்பி (ரசண்ட pp L03) ப்பிரச (ார pprVtS _கை) ப்பி (ரசுர pp @@ -4745,6 +4747,7 @@ _சத்திய) ப்பி (ரமா pp இரத்த) ப்பி (ரவாக pp _ஒL10ி) ப்பி (ரவாக pp _மணி) ப்பி (ரவாள pp + _மணி) ப்பி (ரவாள pp தேச) ப்பி (ரஷ்ட pp _ஜாதி) ப்பி (ரஷ்ட pp _வான) ப்பி (ரஸ்த pp @@ -4757,6 +4760,7 @@ _கூட்டு) ப்பி (ரார்த்தனை pp _கஜ) ப்ப (ிருஷ்ட bb L03) ப்பி (ரேத pp L03) ப்பி (ரேத pp + L03) ப்பி (ரேத pp L03) ப்பி (ரேரணை pp _ஹ) ப்ப (ிள bb _க்ள) ப்ப (ுகள bb @@ -4771,6 +4775,7 @@ _சந்தேக) ப்ப (ுத்தி bb _ல) ப்ப (ை bb _தர்) ப்ப (ை bb _மர) ப்ப (ொம்மை bb + ரா) ப்ப (ோஜன bb _ரா) ப்ப (ோஜன bb துர்) ப்ப (ோதனை bb _கே) ப் (மாரி p diff --git a/docs/commands.html b/docs/commands.html index fcf46181..0d739b5e 100644 --- a/docs/commands.html +++ b/docs/commands.html @@ -80,7 +80,7 @@ If neither -f nor --stdin is given, then the text input is taken from "text word
-s <integer>
Sets the speed in words-per-minute (approximate values for the default English voice, others may differ slightly). The default value is 175. I generally use a faster speed -of 200. Range 80 to 450. Larger value are rounded down to the maximum. +of 260. The lower limit is 80. There is no upper limit, but about 500 is probably a practical maximum.

-b <integer>
@@ -141,8 +141,9 @@ Some languages may need additional dictionary data, see
-x
-
The phoneme mnemonics, into which the input text is translated, are -written to stdout. +
The phoneme mnemonics, into which the input text is translated, are written to stdout. +If a phoneme name contains more than one letter (eg. [tS]), the --sep or --tie option can be used to distinguish +this from separate phonemes.

-X
@@ -167,12 +168,8 @@ The same as --compile, but source line numbers from the *_rules
--ipa
Writes phonemes to stdout, using the International Phonetic Alphabet (IPA).
-If a phoneme name contains more than one letter (eg. [tS]) an optional parameter can be used to distinguish +If a phoneme name contains more than one letter (eg. [tS]), the --sep or --tie option can be used to distinguish this from separate phonemes. -
---pho=1 Use a tie character (U+0361) before subsequence letters. -
---pho=2 Use a zero-width-joiner (U+200D) before subsequent letters.

--path [="<directory path>"]
@@ -190,10 +187,18 @@ If specified, the output from -x, -X, --ipa, and --pho options is written to thi
Speaks the names of punctuation characters when they are encountered in the text. If <characters> are given, then only those listed punctuation characters are spoken, eg. --punct=".,;?"

+

--sep [=<character>]
+
+The character is used to separate individual phonemes in the output which is produced by the -x or --ipa options. The default is a space character. The character z means use a ZWNJ character (U+200c). +

--split [=<minutes>]
Used with -w, it starts a new WAV file every <minutes> minutes, at the next sentence boundary.

+

--tie [=<character>]
+
+The character is used within multi-letter phonemes in the output which is produced by the -x or --ipa options. The default is the tie character  ͡  U+361. The character z means use a ZWJ character (U+200d). +

--voices [=<language code>]
Lists the available voices.
diff --git a/espeak-data/mbrola_ph/af1_phtrans b/espeak-data/mbrola_ph/af1_phtrans deleted file mode 100644 index a87ec4cc..00000000 Binary files a/espeak-data/mbrola_ph/af1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/ca1_phtrans b/espeak-data/mbrola_ph/ca1_phtrans deleted file mode 100644 index 4fe4188e..00000000 Binary files a/espeak-data/mbrola_ph/ca1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/cr1_phtrans b/espeak-data/mbrola_ph/cr1_phtrans deleted file mode 100644 index 064669ea..00000000 Binary files a/espeak-data/mbrola_ph/cr1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/cs_phtrans b/espeak-data/mbrola_ph/cs_phtrans deleted file mode 100644 index 85ebb03e..00000000 Binary files a/espeak-data/mbrola_ph/cs_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/de2_phtrans b/espeak-data/mbrola_ph/de2_phtrans deleted file mode 100644 index 804a0d40..00000000 Binary files a/espeak-data/mbrola_ph/de2_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/de4_phtrans b/espeak-data/mbrola_ph/de4_phtrans deleted file mode 100644 index e626a582..00000000 Binary files a/espeak-data/mbrola_ph/de4_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/de6_phtrans b/espeak-data/mbrola_ph/de6_phtrans deleted file mode 100644 index f82c1e3b..00000000 Binary files a/espeak-data/mbrola_ph/de6_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/ee1_phtrans b/espeak-data/mbrola_ph/ee1_phtrans deleted file mode 100644 index 32c569a2..00000000 Binary files a/espeak-data/mbrola_ph/ee1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/en1_phtrans b/espeak-data/mbrola_ph/en1_phtrans deleted file mode 100644 index c32db396..00000000 Binary files a/espeak-data/mbrola_ph/en1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/es_phtrans b/espeak-data/mbrola_ph/es_phtrans deleted file mode 100644 index 958799c6..00000000 Binary files a/espeak-data/mbrola_ph/es_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/fr1_phtrans b/espeak-data/mbrola_ph/fr1_phtrans deleted file mode 100644 index dc0fcef7..00000000 Binary files a/espeak-data/mbrola_ph/fr1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/gr2_phtrans b/espeak-data/mbrola_ph/gr2_phtrans deleted file mode 100644 index e7dca3af..00000000 Binary files a/espeak-data/mbrola_ph/gr2_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/grc-de6_phtrans b/espeak-data/mbrola_ph/grc-de6_phtrans deleted file mode 100644 index e41d3105..00000000 Binary files a/espeak-data/mbrola_ph/grc-de6_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/hn1_phtrans b/espeak-data/mbrola_ph/hn1_phtrans deleted file mode 100644 index b2560ce7..00000000 Binary files a/espeak-data/mbrola_ph/hn1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/hu1_phtrans b/espeak-data/mbrola_ph/hu1_phtrans deleted file mode 100644 index eb661d3a..00000000 Binary files a/espeak-data/mbrola_ph/hu1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/ic1_phtrans b/espeak-data/mbrola_ph/ic1_phtrans deleted file mode 100644 index 978ec49e..00000000 Binary files a/espeak-data/mbrola_ph/ic1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/id1_phtrans b/espeak-data/mbrola_ph/id1_phtrans deleted file mode 100644 index bd4b90cb..00000000 Binary files a/espeak-data/mbrola_ph/id1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/in1_phtrans b/espeak-data/mbrola_ph/in1_phtrans deleted file mode 100644 index cf1c5895..00000000 Binary files a/espeak-data/mbrola_ph/in1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/ir1_phtrans b/espeak-data/mbrola_ph/ir1_phtrans deleted file mode 100644 index 671873e7..00000000 Binary files a/espeak-data/mbrola_ph/ir1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/it3_phtrans b/espeak-data/mbrola_ph/it3_phtrans deleted file mode 100644 index c9174cf0..00000000 Binary files a/espeak-data/mbrola_ph/it3_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/la1_phtrans b/espeak-data/mbrola_ph/la1_phtrans deleted file mode 100644 index 1f2eb929..00000000 Binary files a/espeak-data/mbrola_ph/la1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/lt1_phtrans b/espeak-data/mbrola_ph/lt1_phtrans deleted file mode 100644 index 1066dfbc..00000000 Binary files a/espeak-data/mbrola_ph/lt1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/lt2_phtrans b/espeak-data/mbrola_ph/lt2_phtrans deleted file mode 100644 index 1066dfbc..00000000 Binary files a/espeak-data/mbrola_ph/lt2_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/mx1_phtrans b/espeak-data/mbrola_ph/mx1_phtrans deleted file mode 100644 index 3b3e6f37..00000000 Binary files a/espeak-data/mbrola_ph/mx1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/mx2_phtrans b/espeak-data/mbrola_ph/mx2_phtrans deleted file mode 100644 index a9bbb0f6..00000000 Binary files a/espeak-data/mbrola_ph/mx2_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/nl_phtrans b/espeak-data/mbrola_ph/nl_phtrans deleted file mode 100644 index 1edb05ae..00000000 Binary files a/espeak-data/mbrola_ph/nl_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/pl1_phtrans b/espeak-data/mbrola_ph/pl1_phtrans deleted file mode 100644 index 5c3583da..00000000 Binary files a/espeak-data/mbrola_ph/pl1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/pt1_phtrans b/espeak-data/mbrola_ph/pt1_phtrans deleted file mode 100644 index f101c661..00000000 Binary files a/espeak-data/mbrola_ph/pt1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/pt_phtrans b/espeak-data/mbrola_ph/pt_phtrans deleted file mode 100644 index 9de1630d..00000000 Binary files a/espeak-data/mbrola_ph/pt_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/ptbr4_phtrans b/espeak-data/mbrola_ph/ptbr4_phtrans deleted file mode 100644 index 25bfdbf4..00000000 Binary files a/espeak-data/mbrola_ph/ptbr4_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/ptbr_phtrans b/espeak-data/mbrola_ph/ptbr_phtrans deleted file mode 100644 index f11ad870..00000000 Binary files a/espeak-data/mbrola_ph/ptbr_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/ro1_phtrans b/espeak-data/mbrola_ph/ro1_phtrans deleted file mode 100644 index 4dec1599..00000000 Binary files a/espeak-data/mbrola_ph/ro1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/sv2_phtrans b/espeak-data/mbrola_ph/sv2_phtrans deleted file mode 100644 index 805608fb..00000000 Binary files a/espeak-data/mbrola_ph/sv2_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/sv_phtrans b/espeak-data/mbrola_ph/sv_phtrans deleted file mode 100644 index fcd75c4d..00000000 Binary files a/espeak-data/mbrola_ph/sv_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/tr1_phtrans b/espeak-data/mbrola_ph/tr1_phtrans deleted file mode 100644 index 0d6fa2a9..00000000 Binary files a/espeak-data/mbrola_ph/tr1_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/us3_phtrans b/espeak-data/mbrola_ph/us3_phtrans deleted file mode 100644 index 90607e18..00000000 Binary files a/espeak-data/mbrola_ph/us3_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/us_phtrans b/espeak-data/mbrola_ph/us_phtrans deleted file mode 100644 index f0af9334..00000000 Binary files a/espeak-data/mbrola_ph/us_phtrans and /dev/null differ diff --git a/espeak-data/mbrola_ph/vz_phtrans b/espeak-data/mbrola_ph/vz_phtrans deleted file mode 100644 index 0df524f0..00000000 Binary files a/espeak-data/mbrola_ph/vz_phtrans and /dev/null differ diff --git a/espeak-data/voices/test/eu b/espeak-data/voices/europe/eu similarity index 100% rename from espeak-data/voices/test/eu rename to espeak-data/voices/europe/eu diff --git a/mkdictlist b/mkdictlist index 477582a1..6c51bd47 100755 --- a/mkdictlist +++ b/mkdictlist @@ -11,6 +11,7 @@ import os voices = set() dictionaries = {} phoneme_data = set() +mbrola = set() # Map voice names to dictionaries when these do not match. special_voices = { @@ -46,8 +47,13 @@ def find_phoneme_data(path): if filename.startswith('ph_'): phoneme_data.add(phondata_path) +def find_mbrola_voices(path): + for filename in os.listdir(path): + mbrola.add(filename) + find_voices('espeak-data/voices') find_phoneme_data('phsource') +find_mbrola_voices('phsource/mbrola') for filename in os.listdir('dictsource'): if filename.endswith('_rules') or filename.endswith('_list') or filename in ['bg_listx', 'it_listx']: @@ -101,6 +107,21 @@ def write_dictionary_make_rules(f): f.write('endif\n') f.write('\tcd dictsource && ESPEAK_DATA_PATH=$(PWD) LD_LIBRARY_PATH=../src:${LD_LIBRARY_PATH} ../src/espeak --compile=%s && cd ..\n' % name) +def write_mbrola_make_rules(f): + f.write('\n##### mbrola:\n') + f.write('\n') + f.write('mbrola: \\\n') + for n, name in enumerate(sorted(mbrola)): + if n == len(mbrola) - 1: + f.write('\tespeak-data/mbrola_ph/%s_phtrans\n' % name) + else: + f.write('\tespeak-data/mbrola_ph/%s_phtrans \\\n' % name) + for name in sorted(mbrola): + f.write('\n') + f.write('espeak-data/mbrola_ph/%s_phtrans: phsource/mbrola/%s src/espeakedit\n' % (name, name)) + f.write('\tmkdir -p espeak-data/mbrola_ph\n') + f.write('\tESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile-mbrola ${PWD}/$<\n') + try: filename = sys.argv[1] except: @@ -113,6 +134,8 @@ if filename: f.write(prelude) write_phoneme_data_rules(f) write_dictionary_make_rules(f) + write_mbrola_make_rules(f) else: write_phoneme_data_rules(sys.stdout) write_dictionary_make_rules(sys.stdout) + write_mbrola_make_rules(sys.stdout) diff --git a/phsource/mbrola/de6 b/phsource/mbrola/de6 index 1564267c..c5f69ca8 100644 --- a/phsource/mbrola/de6 +++ b/phsource/mbrola/de6 @@ -37,6 +37,8 @@ // phonemes for English words 0 @L NULL 40 @ l +0 m- NULL 20 @ m +0 n- NULL 20 @ n 0 @2 NULL 0 @ 0 @5 NULL 0 @ 0 a# NULL 0 @ diff --git a/phsource/ph_basque b/phsource/ph_basque index ab02b371..fd9c5a11 100644 --- a/phsource/ph_basque +++ b/phsource/ph_basque @@ -1,186 +1,167 @@ - -//==================================================== -// Basque - based on Base2 -//==================================================== - -phoneme a - vowel starttype #a endtype #a - length 200 - FMT(vowel/a_4) -endphoneme - - -phoneme a2 // delete if the next vowel is 'a'. Used for numbers. - vowel starttype #a endtype #a - length 200 - - IF nextPh(#a) THEN - ChangePhoneme(NULL) // merge consecutive 'a' - ELSE - ChangePhoneme(a) - ENDIF -endphoneme - - -phoneme e - vowel starttype #e endtype #e - length 200 - FMT(vowel/e_mid2) -endphoneme - - -phoneme i - vowel starttype #i endtype #i - length 190 - IfNextVowelAppend(;) - FMT(vowel/i) -endphoneme - - -phoneme o - vowel starttype #o endtype #o - length 200 - FMT(vowel/oo) -endphoneme - - -phoneme u - vowel starttype #u endtype #u - length 200 - FMT(vowel/u_bck2) -endphoneme - - -phoneme Y - vowel starttype #@ endtype #@ - length 200 - FMT(vowel/y#) -endphoneme - - - -// Note: I have made [s] and [z] the same, and similarly [ts] and [tz] -// These should be changed to the correct "s", "z", "ts" and "tz" sounds fo Basque. - -phoneme s - vls alv frc sibilant - ipa ʂ - lengthmod 3 - Vowelin f1=0 f2=1700 -300 300 f3=-100 80 - Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 - - IF nextPh(isPause) THEN - WAV(ufric/sh_rfx, 60) - ENDIF - WAV(ufric/sh_rfx, 90) // different from s but probably not correct -endphoneme - - -phoneme z - vls alv frc sibilant - ipa s - lengthmod 3 - Vowelin f1=0 f2=1700 -300 300 f3=-100 80 - Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 - - // z+z=tz, z+g=zk, z+g=zt, z+b=zp - IF nextPh(z) THEN - ChangeNextPhoneme(tz) - ChangePhoneme(NULL) - ELSEIF nextPh(g) THEN - ChangeNextPhoneme(k) - ELSEIF nextPh(d) THEN - ChangeNextPhoneme(t) - ELSEIF nextPh(b) THEN - ChangeNextPhoneme(p) - ENDIF - - IF nextPh(isPause) THEN - WAV(ufric/s_, 60) - ENDIF - WAV(ufric/s, 80) -endphoneme - - -phoneme ts - vls alv afr sibilant - ipa tʂ - lengthmod 2 - Vowelin f1=0 f2=1700 -300 300 f3=-100 80 - Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 - IF nextPh(isPause2) THEN - WAV(ustop/ts_) - ENDIF - WAV(ustop/ts) -endphoneme - - -phoneme tz - vls alv afr sibilant - ipa ts - lengthmod 2 - Vowelin f1=0 f2=1700 -300 300 f3=-100 80 - Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 - IF nextPh(isPause2) THEN - WAV(ustop/ts_) - ENDIF - WAV(ustop/ts) -endphoneme - - -phoneme t - vls dnt stop - lengthmod 2 - - // t+g=k, t+d=t, t+z=tz - IF nextPh(g) THEN - ChangeNextPhoneme(k) - ChangePhoneme(NULL) - ELSEIF nextPh(d) THEN - ChangeNextPhoneme(t) - ChangePhoneme(NULL) - ELSEIF nextPh(z) THEN - ChangeNextPhoneme(tz) - ChangePhoneme(NULL) - ENDIF - - CALL base2/t -endphoneme - - -phoneme r - vcd alv flp rhotic - brkafter - ipa ɾ - lengthmod 3 - - IF nextPhW(isVowel) THEN - ChangePhoneme(**) - ENDIF - - CALL base/* -endphoneme - - -phoneme b - import_phoneme es/b -endphoneme - -phoneme d - import_phoneme es/d -endphoneme - -phoneme g - import_phoneme es/g -endphoneme - -phoneme n - vcd alv nasal - lengthmod 4 - - IF prevPhW(i) AND nextPhW(isVowel) THEN - ChangePhoneme(n^) - ENDIF - - CALL base/n -endphoneme + +//==================================================== +// Basque - based on Base2 +//==================================================== + +phoneme a + vowel starttype #a endtype #a + length 200 + FMT(vowel/a_4) +endphoneme + + +phoneme a2 // delete if the next vowel is 'a'. Used for numbers. + vowel starttype #a endtype #a + + length 200 + + IF nextPh(#a) THEN + ChangePhoneme(NULL) // merge consecutive 'a' + ENDIF + + FMT(vowel/a_4) +endphoneme + + +phoneme e + vowel starttype #e endtype #e + length 200 + FMT(vowel/e_mid2) +endphoneme + + +phoneme i + vowel starttype #i endtype #i + length 190 + IfNextVowelAppend(;) + FMT(vowel/i) +endphoneme + + +phoneme o + vowel starttype #o endtype #o + length 200 + FMT(vowel/oo) +endphoneme + + +phoneme u + vowel starttype #u endtype #u + length 200 + FMT(vowel/u_bck2) +endphoneme + + +phoneme Y + vowel starttype #@ endtype #@ + length 200 + FMT(vowel/y#) +endphoneme + + +phoneme s +import_phoneme es/s +endphoneme + + +phoneme z + vls alv frc sibilant + ipa s + lengthmod 3 + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + IF nextPh(isPause) THEN + WAV(ufric/z_eu, 60) + ENDIF + WAV(ufric/z_eu, 90) +endphoneme + + +phoneme ts + vls alv afr sibilant + ipa t? + lengthmod 2 + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + IF nextPh(isPause2) THEN + WAV(ufric/ts_eu, 60) + ENDIF + WAV(ufric/ts_eu, 90) +endphoneme + + +phoneme tz + vls alv afr sibilant + ipa ts + lengthmod 2 + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + IF nextPh(isPause2) THEN + WAV(ufric/tz_eu, 90) + ENDIF + WAV(ufric/tz_eu, 60) +endphoneme + + +phoneme t + vls dnt stop + lengthmod 2 + CALL base2/t +endphoneme + + +phoneme r + vcd alv flp rhotic + brkafter + ipa ? + lengthmod 3 + + IF nextPhW(isVowel) THEN + ChangePhoneme(**) + ENDIF + + CALL base/* +endphoneme + + +phoneme b + import_phoneme es/b +endphoneme + +phoneme d + import_phoneme es/d +endphoneme + +phoneme g + import_phoneme es/g +endphoneme + +phoneme n + vcd alv nasal + lengthmod 4 + + IF prevPhW(#i) AND nextPhW(isVowel) THEN + ChangePhoneme(n^) + ENDIF + + CALL base/n +endphoneme + +phoneme n2 // doesn't palatalise, used for exceptions + vcd alv nasal + lengthmod 4 + CALL base/n +endphoneme + +phoneme l + liquid + IF prevPhW(#i) AND nextPhW(isVowel) THEN + ChangePhoneme(l^) + ENDIF + CALL base/l +endphoneme + +phoneme l2 // same as l2 + liquid + CALL base/l +endphoneme diff --git a/phsource/ph_english b/phsource/ph_english index de0d554d..93218268 100644 --- a/phsource/ph_english +++ b/phsource/ph_english @@ -279,13 +279,14 @@ endphoneme phoneme i // optional variant of [I] for end of words vowel starttype #i endtype #i + unstressed ipa i length 150 IfNextVowelAppend(;) - IF NOT thisPh(isFinalVowel) THEN - ChangePhoneme(I) - ENDIF +// IF NOT thisPh(isFinalVowel) THEN +// ChangePhoneme(I) +// ENDIF FMT(vowel/ii_7) endphoneme diff --git a/phsource/ph_english_us b/phsource/ph_english_us index 6d8edc33..02067c59 100644 --- a/phsource/ph_english_us +++ b/phsource/ph_english_us @@ -48,8 +48,8 @@ phoneme a IF nextPh(isNasal) THEN FMT(vnasal/ee_n2) - ELSEIF nextPh(r) THEN - length 230 + ELSEIF nextPh(r) AND thisPh(isStressed) THEN + length 190 FMT(vwl_en_us/ar) ENDIF FMT(vwl_en_us/a) diff --git a/phsource/ph_tamil b/phsource/ph_tamil index 33317f7e..5708c83c 100644 --- a/phsource/ph_tamil +++ b/phsource/ph_tamil @@ -165,22 +165,6 @@ phoneme z. endphoneme phoneme r - liquid rhotic - lengthmod 3 - - IF thisPh(isWordEnd) THEN - CALL base/r/ - ENDIF - - IF prevPhW(isVowel) THEN - IF nextPhW(isNotVowel) THEN - ChangePhoneme(**) - ENDIF - - ChangePhoneme(*) - ENDIF - - CALL base/r - ipa ɾ + import_phoneme base/r endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index 179c82ac..289ad876 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1980,5 +1980,6 @@ include ph_greenlandic phonemetable om base include ph_oromo -//phonemetable en2 en +//phonemetable en-test base //include ph_english_test + diff --git a/phsource/ufric/ts_eu.wav b/phsource/ufric/ts_eu.wav new file mode 100644 index 00000000..67e5ae89 Binary files /dev/null and b/phsource/ufric/ts_eu.wav differ diff --git a/phsource/ufric/tz_eu.wav b/phsource/ufric/tz_eu.wav new file mode 100644 index 00000000..32e28cb2 Binary files /dev/null and b/phsource/ufric/tz_eu.wav differ diff --git a/phsource/ufric/z_eu.wav b/phsource/ufric/z_eu.wav new file mode 100644 index 00000000..4adb41da Binary files /dev/null and b/phsource/ufric/z_eu.wav differ diff --git a/src/compiledata.cpp b/src/compiledata.cpp index b137f7a1..9aa52be2 100644 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -3747,9 +3747,9 @@ fprintf(f_errors,"\nRefs %d, Reused %d\n",count_references,duplicate_references ReadPhondataManifest(); } // end of CompilePhonemeData +#include - -void CompileMbrola() +void CompileMbrola(const char *mbrola_file) {//================= char *p; FILE *f_in; @@ -3769,7 +3769,15 @@ void CompileMbrola() int mbrola_ctrl = 20; // volume in 1/16 ths MBROLA_TAB data[N_PHONEME_TAB]; - wxString filepath = wxFileSelector(_T("Read Mbrola phonemes file"),path_phsource+_T("/mbrola"),_T(""),_T(""),_T("*"),wxOPEN); + wxString filepath; + if (mbrola_file == NULL) + { + filepath = wxFileSelector(_T("Read Mbrola phonemes file"),path_phsource+_T("/mbrola"),_T(""),_T(""),_T("*"),wxOPEN); + } + else + { + filepath = mbrola_file; + } strcpy(buf,filepath.mb_str(wxConvLocal)); if((f_in = fopen(buf,"r")) == NULL) { diff --git a/src/compiledict.cpp b/src/compiledict.cpp index 90d0d85f..4c389670 100644 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -915,7 +915,7 @@ static char rule_phonemes[80]; static char group_name[LEN_GROUP_NAME+1]; static int group3_ix; -#define N_RULES 2000 // max rules for each group +#define N_RULES 3000 // max rules for each group @@ -1681,6 +1681,7 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) int count=0; int different; int wc; + int err_n_rules=0; const char *prev_rgroup_name; unsigned int char_code; int compile_mode=0; @@ -1726,6 +1727,7 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) count += n_rules; } n_rules = 0; + err_n_rules = 0; if(compile_mode == 2) { @@ -1808,9 +1810,22 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) { case 1: // .group prule = compile_rule(buf); - if((prule != NULL) && (n_rules < N_RULES)) + if(prule != NULL) { - rules[n_rules++] = prule; + if(n_rules < N_RULES) + { + rules[n_rules++] = prule; + } + else + { + if(err_n_rules == 0) + { + fprintf(stderr, "\nExceeded limit of rules (%d) in group '%s'\n", N_RULES, group_name); + error_count++; + err_n_rules = 1; + } + } + } break; diff --git a/src/dictionary.cpp b/src/dictionary.cpp index c350fbe9..e39e1d41 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -642,8 +642,11 @@ const char *GetTranslatedPhonemeString(int phoneme_mode) /* Called after a clause has been translated into phonemes, in order to display the clause in phoneme mnemonic form. - phoneme_mode bits 0-3: 0=only phoneme names, 1=ties, 2=ZWJ, 3=underscore separator - bit 4: 0=eSpeak phoneme names, 1=IPA + phoneme_mode + bit 1: use IPA phoneme names + bit 7: use tie between letters in multi-character phoneme names + bits 8-23 tie or separator character + */ int ix; @@ -657,16 +660,12 @@ const char *GetTranslatedPhonemeString(int phoneme_mode) int flags; int use_ipa; int use_tie; - int separate_phonemes = 0; + int separate_phonemes; char phon_buf[30]; char phon_buf2[30]; PHONEME_LIST *plist; static const char *stress_chars = "==,,''"; - static const int char_tie[] = {0x0361, 0x200d}; // combining-double-inverted-breve, zero-width-joiner - - use_ipa = phoneme_mode & 0x10; - use_tie = phoneme_mode & 0x0f; if(phon_out_buf == NULL) { @@ -678,10 +677,15 @@ const char *GetTranslatedPhonemeString(int phoneme_mode) } } - if(use_tie >= 3) + use_ipa = phoneme_mode & espeakPHONEMES_IPA; + if(phoneme_mode & espeakPHONEMES_TIE) { - // separate individual phonemes with underscores - separate_phonemes = '_'; + use_tie = phoneme_mode >> 8; + separate_phonemes = 0; + } + else + { + separate_phonemes = phoneme_mode >> 8; use_tie = 0; } @@ -695,14 +699,15 @@ const char *GetTranslatedPhonemeString(int phoneme_mode) WritePhMnemonic(phon_buf2, plist->ph, plist, use_ipa, &flags); if(plist->newword) *buf++ = ' '; - else + + if((!plist->newword) || (separate_phonemes == ' ')) { if((separate_phonemes != 0) && (ix > 1)) { utf8_in(&c, phon_buf2); if((c < 0x2b0) || (c > 0x36f)) // not if the phoneme starts with a superscript letter { - *buf++ = separate_phonemes; + buf += utf8_out(separate_phonemes, buf); } } } @@ -739,12 +744,12 @@ const char *GetTranslatedPhonemeString(int phoneme_mode) for(p=phon_buf2; *p != 0;) { p += utf8_in(&c, p); - if(use_tie > 0) + if(use_tie != 0) { // look for non-inital alphabetic character, but not diacritic, superscript etc. if((count>0) && !(flags & (1 << (count-1))) && ((c < 0x2b0) || (c > 0x36f)) && iswalpha2(c)) { - buf += utf8_out(char_tie[use_tie-1], buf); + buf += utf8_out(use_tie, buf); } } buf += utf8_out(c, buf); @@ -1202,6 +1207,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, PHONEME_TAB *ph; int stress; int max_stress; + int max_stress_input; // any stress specified in the input? int vowel_count; // num of vowels + 1 int ix; int v; @@ -1266,7 +1272,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, unstressed_word = 1; } - max_stress = GetVowelStress(tr, phonetic, vowel_stress, &vowel_count, &stressed_syllable, 1); + max_stress = max_stress_input = GetVowelStress(tr, phonetic, vowel_stress, &vowel_count, &stressed_syllable, 1); if((max_stress < 0) && dictionary_flags) { max_stress = 0; @@ -1347,40 +1353,33 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, { stressed_syllable = vowel_count - 2; - if(stressflags & (S_FINAL_SPANISH | S_FINAL_STRESS_C)) + if(stressflags & S_FINAL_SPANISH) { // LANG=Spanish, stress on last vowel if the word ends in a consonant other than 'n' or 's' if(phoneme_tab[final_ph]->type != phVOWEL) { - if(stressflags & S_FINAL_STRESS_C) + mnem = phoneme_tab[final_ph]->mnemonic; + + if(tr->translator_name == L('a','n')) { - stressed_syllable = vowel_count - 1; + if(((mnem != 's') && (mnem !='n')) || phoneme_tab[final_ph2]->type != phVOWEL) + stressed_syllable = vowel_count - 1; // stress on last syllable + } + else + if(tr->translator_name == L('i','a')) + { + if((mnem != 's') || phoneme_tab[final_ph2]->type != phVOWEL) + stressed_syllable = vowel_count - 1; // stress on last syllable } else { - mnem = phoneme_tab[final_ph]->mnemonic; - - if(tr->translator_name == L('a','n')) + if((mnem == 's') && (phoneme_tab[final_ph2]->type == phNASAL)) { - if(((mnem != 's') && (mnem !='n')) || phoneme_tab[final_ph2]->type != phVOWEL) - stressed_syllable = vowel_count - 1; // stress on last syllable + // -ns stress remains on penultimate syllable } - else - if(tr->translator_name == L('i','a')) + else if(((phoneme_tab[final_ph]->type != phNASAL) && (mnem != 's')) || (phoneme_tab[final_ph2]->type != phVOWEL)) { - if((mnem != 's') || phoneme_tab[final_ph2]->type != phVOWEL) - stressed_syllable = vowel_count - 1; // stress on last syllable - } - else - { - if((mnem == 's') && (phoneme_tab[final_ph2]->type == phNASAL)) - { - // -ns stress remains on penultimate syllable - } - else if(((phoneme_tab[final_ph]->type != phNASAL) && (mnem != 's')) || (phoneme_tab[final_ph2]->type != phVOWEL)) - { - stressed_syllable = vowel_count - 1; - } + stressed_syllable = vowel_count - 1; } } } @@ -1587,6 +1586,16 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, break; } + if((stressflags & S_FINAL_VOWEL_UNSTRESSED) && (vowel_count > 2) && (max_stress_input < 3) && (vowel_stress[vowel_count - 1] == 4)) + { + if(phoneme_tab[final_ph]->type == phVOWEL) + { + // don't allow stress on a word-final vowel + vowel_stress[vowel_count - 1] = 1; + vowel_stress[vowel_count - 2] = 4; + } + } + /* now guess the complete stress pattern */ if(max_stress < 4) stress = 4; /* no primary stress marked, use for 1st syllable */ @@ -2560,7 +2569,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ total_consumed = consumed; } - if((option_phonemes == 2) && (match.points > 0) && ((word_flags & FLAG_NO_TRACE) == 0)) + if((option_phonemes & espeakPHONEMES_TRACE) && (match.points > 0) && ((word_flags & FLAG_NO_TRACE) == 0)) { // show each rule that matches, and it's points score int pts; @@ -2637,7 +2646,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c word_copy[ix] = 0; - if((option_phonemes == 2) && ((word_flags & FLAG_NO_TRACE)==0)) + if((option_phonemes & espeakPHONEMES_TRACE) && ((word_flags & FLAG_NO_TRACE)==0)) { char wordbuf[120]; unsigned int ix; @@ -2875,7 +2884,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c return(0); } - if((option_phonemes == 2) && ((word_flags & FLAG_NO_TRACE)==0)) + if((option_phonemes & espeakPHONEMES_TRACE) && ((word_flags & FLAG_NO_TRACE)==0)) { fprintf(f_trans,"\n"); } @@ -3376,7 +3385,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor if(phoneme_len == 0) { - if(option_phonemes == 2) + if(option_phonemes & espeakPHONEMES_TRACE) { print_dictionary_flags(flags, dict_flags_buf, sizeof(dict_flags_buf)); fprintf(f_trans,"Flags: %s %s\n", word1, dict_flags_buf); @@ -3387,7 +3396,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor if(flags != NULL) flags[0] |= FLAG_FOUND; // this flag indicates word was found in dictionary - if(option_phonemes == 2) + if(option_phonemes & espeakPHONEMES_TRACE) { char ph_decoded[N_WORD_PHONEMES]; int textmode; @@ -3569,7 +3578,7 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f word1 = *wordptr; *wordptr = &word_replacement[2]; - if(option_phonemes == 2) + if(option_phonemes & espeakPHONEMES_TRACE) { len = found - word1; memcpy(word,word1,len); // include multiple matching words @@ -3768,7 +3777,7 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy) { utf8_out(tr->langopts.suffix_add_e, &word_end[1]); - if(option_phonemes == 2) + if(option_phonemes & espeakPHONEMES_TRACE) { fprintf(f_trans,"add e\n"); } diff --git a/src/espeak.cpp b/src/espeak.cpp index dbd83f22..517b3481 100644 --- a/src/espeak.cpp +++ b/src/espeak.cpp @@ -53,7 +53,7 @@ static const char *help_text = "-p \n" "\t Pitch adjustment, 0 to 99, default is 50\n" "-s \n" -"\t Speed in words per minute, 80 to 450, default is 175\n" +"\t Speed in approximate words per minute. The default is 175\n" "-v \n" "\t Use voice file of this name from espeak-data/voices\n" "-w \n" @@ -68,7 +68,6 @@ static const char *help_text = "\t Compile pronunciation rules and dictionary from the current\n" "\t directory. specifies the language\n" "--ipa Write phonemes to stdout using International Phonetic Alphabet\n" -"\t --ipa=1 Use ties, --ipa=2 Use ZWJ, --ipa=3 Separate with _\n" "--path=\"\"\n" "\t Specifies the directory containing the espeak-data directory\n" "--pho Write mbrola phoneme data (.pho) to stdout or to the file in --phonout\n" @@ -77,9 +76,15 @@ static const char *help_text = "--punct=\"\"\n" "\t Speak the names of punctuation characters during speaking. If\n" "\t = is omitted, all punctuation is spoken.\n" -"--split=\"\"\n" +"--sep=\n" +"\t Separate phonemes (from -x --ipa) with .\n" +"\t Default is space, z means ZWJN character.\n" +"--split=\n" "\t Starts a new WAV file every . Used with -w\n" "--stdout Write speech output to stdout\n" +"--tie=\n" +"\t Use a tie character within multi-letter phoneme names.\n" +"\t Default is U+361, z means ZWJ character.\n" "--version Shows version number and date, and location of espeak-data\n" "--voices=\n" "\t List the available voices for the specified language.\n" @@ -123,6 +128,37 @@ void strncpy0(char *dest, const char *source, int size) } } +int utf8_in(int *c, const char *buf) +{//================================= +// Read a unicode characater from a UTF8 string +// Returns the number of UTF8 bytes used. +// backwards: set if we are moving backwards through the UTF8 string + int c1; + int n_bytes; + int ix; + static const unsigned char mask[4] = {0xff,0x1f,0x0f,0x07}; + + n_bytes = 0; + + if((c1 = *buf++) & 0x80) + { + if((c1 & 0xe0) == 0xc0) + n_bytes = 1; + else if((c1 & 0xf0) == 0xe0) + n_bytes = 2; + else if((c1 & 0xf8) == 0xf0) + n_bytes = 3; + + c1 &= mask[n_bytes]; + for(ix=0; ix3)) + // deprecated and obsolete + switch(atoi(optarg2)) { - fprintf(stderr,"Bad value for -ipa=\n"); - value = 0; + case 1: + phonemes_separator = '_'; + break; + case 2: + phonemes_separator = 0x0361; + phoneme_options |= espeakPHONEMES_TIE; + break; + case 3: + phonemes_separator = 0x200d; // ZWJ + phoneme_options |= espeakPHONEMES_TIE; + break; } - option_phonemes += value; + } break; - case 0x10b: // -version + case 0x10b: // --version PrintVersion(); exit(0); + + case 0x10c: // --sep + phoneme_options |= espeakPHONEMES_SHOW; + if(optarg2 == 0) + phonemes_separator = ' '; + else + utf8_in(&phonemes_separator, optarg2); + if(phonemes_separator == 'z') + phonemes_separator = 0x200c; // ZWNJ + break; + + case 0x10d: // --tie + phoneme_options |= (espeakPHONEMES_SHOW | espeakPHONEMES_TIE); + if(optarg2 == 0) + phonemes_separator = 0x0361; // default: combining-double-inverted-breve + else + utf8_in(&phonemes_separator, optarg2); + if(phonemes_separator == 'z') + phonemes_separator = 0x200d; // ZWJ + break; + default: exit(0); @@ -707,7 +774,9 @@ int main (int argc, char **argv) espeak_SetParameter(espeakLINELENGTH,option_linelength,0); if(option_punctuation == 2) espeak_SetPunctuationList(option_punctlist); - espeak_SetPhonemeTrace(option_phonemes | option_mbrola_phonemes,f_phonemes_out); + + + espeak_SetPhonemeTrace(phoneme_options | (phonemes_separator << 8), f_phonemes_out); if(filename[0]==0) { diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index dd0256d5..34fa3cf8 100644 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -63,7 +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 CompileMbrola(const char *mbrola_file = NULL); extern void CompileIntonation(); extern void InitSpectrumDisplay(); extern void InitProsodyDisplay(); @@ -148,6 +148,17 @@ if(argc > 1) CompilePhonemeData(); CompileIntonation(); } + else if(argc > 2 && strcmp(param,"--compile-mbrola")==0) + { + samplerate_native = samplerate = 22050; + LoadPhData(NULL); + if(LoadVoice("", 0) == NULL) + { + fprintf(stderr, "Failed to load default voice\n"); + exit(1); + } + CompileMbrola(argv[2]); + } exit(0); } diff --git a/src/speak.cpp b/src/speak.cpp index e402dea7..f7a4e28a 100644 --- a/src/speak.cpp +++ b/src/speak.cpp @@ -87,7 +87,7 @@ static const char *help_text = "-p \n" "\t Pitch adjustment, 0 to 99, default is 50\n" "-s \n" -"\t Speed in words per minute, 80 to 450, default is 175\n" +"\t Speed in approximate words per minute. The default is 175\n" "-v \n" "\t Use voice file of this name from espeak-data/voices\n" "-w \n" @@ -102,7 +102,6 @@ static const char *help_text = "\t Compile pronunciation rules and dictionary from the current\n" "\t directory. specifies the language\n" "--ipa Write phonemes to stdout using International Phonetic Alphabet\n" -"\t --ipa=1 Use ties, --ipa=2 Use ZWJ, --ipa=3 Separate with _\n" "--path=\"\"\n" "\t Specifies the directory containing the espeak-data directory\n" "--pho Write mbrola phoneme data (.pho) to stdout or to the file in --phonout\n" @@ -111,9 +110,15 @@ static const char *help_text = "--punct=\"\"\n" "\t Speak the names of punctuation characters during speaking. If\n" "\t = is omitted, all punctuation is spoken.\n" -"--split=\"\"\n" +"--sep=\n" +"\t Separate phonemes (from -x --ipa) with .\n" +"\t Default is space, z means ZWJN character.\n" +"--split=\n" "\t Starts a new WAV file every . Used with -w\n" "--stdout Write speech output to stdout\n" +"--tie=\n" +"\t Use a tie character within multi-letter phoneme names.\n" +"\t Default is U+361, z means ZWJ character.\n" "--version Shows version number and date, and location of espeak-data\n" "--voices=\n" "\t List the available voices for the specified language.\n" @@ -496,6 +501,8 @@ int main (int argc, char **argv) {"pho", no_argument, 0, 0x109}, {"ipa", optional_argument, 0, 0x10a}, {"version", no_argument, 0, 0x10b}, + {"sep", optional_argument, 0, 0x10c}, + {"tie", optional_argument, 0, 0x10d}, {0, 0, 0, 0} }; @@ -516,6 +523,8 @@ int main (int argc, char **argv) int flag_stdin = 0; int flag_compile = 0; int pitch_adjustment = 50; + int phoneme_options = 0; + int phonemes_separator = 0; espeak_VOICE voice_select; char filename[200]; char voicename[40]; @@ -622,11 +631,11 @@ int main (int argc, char **argv) break; case 'x': - option_phonemes = 1; + phoneme_options |= espeakPHONEMES_SHOW; break; case 'X': - option_phonemes = 2; + phoneme_options |= espeakPHONEMES_TRACE; break; case 'm': @@ -729,21 +738,29 @@ int main (int argc, char **argv) break; case 0x109: // --pho - option_mbrola_phonemes = 16; + phoneme_options |= espeakPHONEMES_MBROLA; break; case 0x10a: // --ipa - option_phonemes = 3; + phoneme_options |= espeakPHONEMES_IPA; if(optarg2 != NULL) { - value = -1; - sscanf(optarg2,"%d",&value); - if((value<0) || (value>3)) + // deprecated and obsolete + switch(atoi(optarg2)) { - fprintf(stderr,"Bad value for -ipa=\n"); - value = 0; + case 1: + phonemes_separator = '_'; + break; + case 2: + phonemes_separator = 0x0361; + phoneme_options |= espeakPHONEMES_TIE; + break; + case 3: + phonemes_separator = 0x200d; // ZWJ + phoneme_options |= espeakPHONEMES_TIE; + break; } - option_phonemes += value; + } break; @@ -751,6 +768,26 @@ int main (int argc, char **argv) init_path(argv[0],data_path); printf("speak text-to-speech: %s Data at: %s\n",version_string,path_home); exit(0); + + case 0x10c: // --sep + phoneme_options |= espeakPHONEMES_SHOW; + if(optarg2 == 0) + phonemes_separator = ' '; + else + utf8_in(&phonemes_separator, optarg2); + if(phonemes_separator == 'z') + phonemes_separator = 0x200c; // ZWNJ + break; + + case 0x10d: // --tie + phoneme_options |= (espeakPHONEMES_SHOW | espeakPHONEMES_TIE); + if(optarg2 == 0) + phonemes_separator = 0x0361; // default: combining-double-inverted-breve + else + utf8_in(&phonemes_separator, optarg2); + if(phonemes_separator == 'z') + phonemes_separator = 0x200d; // ZWJ + break; default: exit(0); @@ -803,6 +840,8 @@ int main (int argc, char **argv) SetParameter(espeakPUNCTUATION,option_punctuation,0); SetParameter(espeakWORDGAP,wordgap,0); + option_phonemes = phoneme_options | (phonemes_separator << 8); + if(pitch_adjustment != 50) { SetParameter(espeakPITCH,pitch_adjustment,0); diff --git a/src/speak_lib.cpp b/src/speak_lib.cpp index d36b41c2..0a22bff9 100644 --- a/src/speak_lib.cpp +++ b/src/speak_lib.cpp @@ -812,7 +812,6 @@ ENTER("espeak_Initialize"); return(EE_INTERNAL_ERROR); option_phonemes = 0; - option_mbrola_phonemes = 0; option_phoneme_events = (options & (espeakINITIALIZE_PHONEME_EVENTS | espeakINITIALIZE_PHONEME_IPA)); VoiceReset(0); @@ -1160,19 +1159,22 @@ ESPEAK_API espeak_ERROR espeak_SetPunctuationList(const wchar_t *punctlist) } // end of espeak_SetPunctuationList -ESPEAK_API void espeak_SetPhonemeTrace(int value, FILE *stream) -{//============================================================ +ESPEAK_API void espeak_SetPhonemeTrace(int phonememode, FILE *stream) +{//=================================================================== ENTER("espeak_SetPhonemes"); - /* Controls the output of phoneme symbols for the text - bits 0-3: - value=0 No phoneme output (default) - value=1 Output the translated phoneme symbols for the text - value=2 as (1), but also output a trace of how the translation was done (matching rules and list entries) - value=3 as (1), but produces IPA phoneme names rather than ascii - bit 4: produce mbrola pho data - */ - option_phonemes = value & 7; - option_mbrola_phonemes = value & 16; +/* phonememode: Controls the output of phoneme symbols for the text + bits 0-2: + value=0 No phoneme output (default) + value=1 Output the translated phoneme symbols for the text + value=2 as (1), but produces IPA phoneme names rather than ascii + bit 3: output a trace of how the translation was done (showing the matching rules and list entries) + bit 4: produce pho data for mbrola + bit 7: use (bits 8-23) as a tie within multi-letter phonemes names + bits 8-23: separator character, between phoneme names + + stream output stream for the phoneme symbols (and trace). If stream=NULL then it uses stdout. +*/ + option_phonemes = phonememode; f_trans = stream; if(stream == NULL) f_trans = stderr; @@ -1182,8 +1184,10 @@ ESPEAK_API void espeak_SetPhonemeTrace(int value, FILE *stream) ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode, int phonememode) {//================================================================================================= - /* phoneme_mode bits 0-3: 0=only phoneme names, 1=ties, 2=ZWJ, 3=underscore separator - bits 4-7: 0=eSpeak phoneme names, 1=IPA + /* phoneme_mode + bit 1: 0=eSpeak's ascii phoneme names, 1= International Phonetic Alphabet (as UTF-8 characters). + bit 7: use (bits 8-23) as a tie within multi-letter phonemes names + bits 8-23: separator character, between phoneme names */ option_multibyte = textmode & 7; diff --git a/src/speak_lib.h b/src/speak_lib.h index f33e0313..be5ae1d6 100644 --- a/src/speak_lib.h +++ b/src/speak_lib.h @@ -34,7 +34,7 @@ #define ESPEAK_API #endif -#define ESPEAK_API_REVISION 9 +#define ESPEAK_API_REVISION 10 /* Revision 2 Added parameter "options" to eSpeakInitialize() @@ -61,6 +61,9 @@ Revision 8 26.Apr.2013 Revision 9 30.May.2013 Changed function espeak_TextToPhonemes(). +Revision 10 29.Aug.2014 + Changed phonememode parameter to espeak_TextToPhonemes() and espeak_SetPhonemeTrace + */ /********************/ /* Initialization */ @@ -473,15 +476,25 @@ ESPEAK_API espeak_ERROR espeak_SetPunctuationList(const wchar_t *punctlist); EE_INTERNAL_ERROR. */ +#define espeakPHONEMES_SHOW 0x01 +#define espeakPHONEMES_IPA 0x02 +#define espeakPHONEMES_TRACE 0x08 +#define espeakPHONEMES_MBROLA 0x10 +#define espeakPHONEMES_TIE 0x80 + #ifdef __cplusplus extern "C" #endif -ESPEAK_API void espeak_SetPhonemeTrace(int value, FILE *stream); -/* Controls the output of phoneme symbols for the text - value=0 No phoneme output (default) - value=1 Output the translated phoneme symbols for the text - value=2 as (1), but also output a trace of how the translation was done (matching rules and list entries) - value=3 as (1), but produces IPA rather than ascii phoneme names +ESPEAK_API void espeak_SetPhonemeTrace(int phonememode, FILE *stream); +/* phonememode: Controls the output of phoneme symbols for the text + bits 0-2: + value=0 No phoneme output (default) + value=1 Output the translated phoneme symbols for the text + value=2 as (1), but produces IPA phoneme names rather than ascii + bit 3: output a trace of how the translation was done (showing the matching rules and list entries) + bit 4: produce pho data for mbrola + bit 7: use (bits 8-23) as a tie within multi-letter phonemes names + bits 8-23: separator character, between phoneme names stream output stream for the phoneme symbols (and trace). If stream=NULL then it uses stdout. */ @@ -506,15 +519,11 @@ ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode, espeakCHARS_WCHAR Wide characters (wchar_t) espeakCHARS_16BIT 16 bit characters. - phonememode: bits0-3: - 0= just phonemes. - 1= include ties (U+361) for phoneme names of more than one letter. - 2= include zero-width-joiner for phoneme names of more than one letter. - 3= separate phonemes with underscore characters. + phoneme_mode + bit 1: 0=eSpeak's ascii phoneme names, 1= International Phonetic Alphabet (as UTF-8 characters). + bit 7: use (bits 8-23) as a tie within multi-letter phonemes names + bits 8-23: separator character, between phoneme names - bits 4-7: - 0= eSpeak's ascii phoneme names. - 1= International Phonetic Alphabet (as UTF-8 characters). */ #ifdef __cplusplus diff --git a/src/synth_mbrola.cpp b/src/synth_mbrola.cpp index 961254ef..f3533f0e 100644 --- a/src/synth_mbrola.cpp +++ b/src/synth_mbrola.cpp @@ -35,7 +35,6 @@ #include "translate.h" #include "voice.h" -int option_mbrola_phonemes; #ifdef INCLUDE_MBROLA @@ -646,7 +645,7 @@ int MbrolaGenerate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) if(*n_ph == 0) return(0); - if(option_mbrola_phonemes) + if(option_phonemes & espeakPHONEMES_MBROLA) { // send mbrola data to a file, not to the mbrola library f_mbrola = f_trans; diff --git a/src/synthdata.cpp b/src/synthdata.cpp index c1763765..87e92caa 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.48.10 09.Aug.14"; +const char *version_string = "1.48.11 31.Aug.14"; const int version_phdata = 0x014801; int option_device_number = -1; @@ -620,6 +620,7 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, int instn; int instn2; int count; + int check_endtype = 0; PHONEME_TAB *ph; PHONEME_LIST *plist_this; @@ -672,6 +673,7 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, case 0: // prevPh case 5: // prevPhW plist--; + check_endtype = 1; break; case 1: // thisPh @@ -705,6 +707,7 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, if((worddata==NULL) || (worddata->prev_vowel.ph == NULL)) return(false); // no previous vowel plist = &(worddata->prev_vowel); + check_endtype = 1; break; case 9: // next3PhW @@ -720,6 +723,7 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, if((plist[0].sourceix) || (plist[-1].sourceix)) return(false); plist-=2; + check_endtype = 1; break; } @@ -744,7 +748,9 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, // 'data' is a phoneme number if((phoneme_tab[data]->mnemonic == ph->mnemonic) == true) return(true); - if((which == 0) && (ph->type == phVOWEL)) + + // not an exact match, check for a vowel type (eg. #i ) + if((check_endtype) && (ph->type == phVOWEL)) return(data == ph->end_type); // prevPh() match on end_type return(data == ph->start_type); // thisPh() or nextPh(), match on start_type } diff --git a/src/synthesize.cpp b/src/synthesize.cpp index 00fb8dc5..0c9ea3c1 100644 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -1980,14 +1980,10 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control) CalcPitches(translator, clause_tone); CalcLengths(translator); - if((option_phonemes > 0) || (phoneme_callback != NULL)) + if((option_phonemes & 0xf) || (phoneme_callback != NULL)) { - int phoneme_mode = 0; - if(option_phonemes >= 3) - phoneme_mode = 0x10 + option_phonemes-3; // 0x10=ipa, 0x11=ipa with tie, 0x12=ipa with ZWJ, 0x13=ipa with separators - - phon_out = GetTranslatedPhonemeString(phoneme_mode); - if(option_phonemes > 0) + phon_out = GetTranslatedPhonemeString(option_phonemes); + if(option_phonemes & 0xf) { fprintf(f_trans,"%s\n",phon_out); } diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 9ddaddb7..7c4ce5a0 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -781,7 +781,8 @@ Translator *SelectTranslator(const char *name) if(name2 == L_pap) { // stress last syllable unless word ends with a vowel - tr->langopts.stress_flags = S_FINAL_STRESS_C | S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_NO_AUTO_2; + tr->langopts.stress_rule = STRESSPOSN_1R; + tr->langopts.stress_flags = S_FINAL_VOWEL_UNSTRESSED | S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_NO_AUTO_2; } else { @@ -795,7 +796,8 @@ Translator *SelectTranslator(const char *name) static const short stress_lengths_eu[8] = {200, 200, 200, 200, 0, 0, 210, 230}; // very weak stress static const unsigned char stress_amps_eu[8] = {16,16, 18,18, 18,18, 18,18 }; SetupTranslator(tr,stress_lengths_eu,stress_amps_eu); - tr->langopts.stress_rule = STRESSPOSN_2L; // ?? second syllable ?? + tr->langopts.stress_rule = STRESSPOSN_2L; // ?? second syllable, but not on a word-final vowel + tr->langopts.stress_flags = S_FINAL_VOWEL_UNSTRESSED; tr->langopts.param[LOPT_SUFFIX] = 1; tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_VIGESIMAL; } @@ -1349,8 +1351,8 @@ SetLengthMods(tr,3); // all equal SetupTranslator(tr,stress_lengths_ro,stress_amps_ro); - tr->langopts.stress_rule = STRESSPOSN_2R; - tr->langopts.stress_flags = S_FINAL_STRESS_C + S_FINAL_DIM_ONLY; + tr->langopts.stress_rule = STRESSPOSN_1R; + tr->langopts.stress_flags = S_FINAL_VOWEL_UNSTRESSED | S_FINAL_DIM_ONLY; tr->charset_a0 = charsets[2]; // ISO-8859-2 tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_DFRACTION_3 | NUM_AND_UNITS | NUM_ROMAN; @@ -1453,8 +1455,8 @@ SetLengthMods(tr,3); // all equal SetupTranslator(tr,stress_lengths_sq,stress_amps_sq); - tr->langopts.stress_rule = STRESSPOSN_2R; - tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_FINAL_STRESS_C; + tr->langopts.stress_rule = STRESSPOSN_1R; + tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_FINAL_VOWEL_UNSTRESSED; SetLetterVowel(tr,'y'); tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_DFRACTION_4; tr->langopts.accents = 2; // "capital" after letter name diff --git a/src/translate.cpp b/src/translate.cpp index 39cabd33..2322e70a 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -767,7 +767,7 @@ int ChangeEquivalentPhonemes(Translator *tr, int lang2, char *phonemes) } remove_stress = pb[1]; - if(option_phonemes == 2) + if(option_phonemes & espeakPHONEMES_TRACE) { DecodePhonemes(phonemes, phonbuf); fprintf(f_trans,"(%s) %s -> (%s) ", phoneme_tab_list[lang2].name, phonbuf, phoneme_tab_list[tr->phoneme_tab_ix].name); @@ -810,7 +810,7 @@ int ChangeEquivalentPhonemes(Translator *tr, int lang2, char *phonemes) strcpy(phonemes, phonbuf); - if(option_phonemes == 2) + if(option_phonemes & espeakPHONEMES_TRACE) { SelectPhonemeTable(tr->phoneme_tab_ix); DecodePhonemes(phonemes, phonbuf); @@ -1224,7 +1224,7 @@ if(end_type & SUFX_UNPRON) end_type = end2; strcpy(phonemes,phonemes2); strcpy(end_phonemes,end_phonemes2); - if(option_phonemes == 2) + if(option_phonemes & espeakPHONEMES_TRACE) { DecodePhonemes(end_phonemes,end_phonemes2); fprintf(f_trans," suffix [%s]\n\n",end_phonemes2); diff --git a/src/translate.h b/src/translate.h index ea7a915e..7f973a02 100644 --- a/src/translate.h +++ b/src/translate.h @@ -408,8 +408,8 @@ typedef struct { #define S_FIRST_PRIMARY 0x80 // bit7=if more than one primary stress, make the subsequent primaries to secondary stress -#define S_FINAL_STRESS_C 0x100 -// bit8=stress last syllable if it doesn't end in a vowel +#define S_FINAL_VOWEL_UNSTRESSED 0x100 +// bit8=don't apply default stress to a word-final vowel #define S_FINAL_SPANISH 0x200 // bit9=stress last syllable if it doesn't end in vowel or "s" or "n" LANG=Spanish @@ -673,7 +673,6 @@ extern int option_tone_flags; extern int option_waveout; extern int option_quiet; extern int option_phonemes; -extern int option_mbrola_phonemes; extern int option_phoneme_events; extern int option_linelength; // treat lines shorter than this as end-of-clause extern int option_multibyte; diff --git a/src/transldlg.cpp b/src/transldlg.cpp index d25766a0..8a12cec0 100644 --- a/src/transldlg.cpp +++ b/src/transldlg.cpp @@ -410,7 +410,6 @@ void TranslDlg::OnCommand(wxCommandEvent& event) const char *phon_out2; int clause_tone; int clause_count; - int use_ipa = 0; FILE *f; int fd_temp; char fname_temp[100]; @@ -448,21 +447,20 @@ void TranslDlg::OnCommand(wxCommandEvent& event) } #endif t_phonetic->SetDefaultStyle(style_phonetic); - translate_text = 2; + translate_text = espeakPHONEMES_TRACE; break; case T_TRANSLATE: case MENU_SPEAK_TRANSLATE: t_phonetic->SetDefaultStyle(style_phonetic); - translate_text = 1; + translate_text = espeakPHONEMES_SHOW; break; case T_TRANSLATE_IPA: case MENU_SPEAK_IPA: t_phonetic->SetDefaultStyle(style_phonetic_large); - translate_text = 3; - use_ipa = 0x10; + translate_text = espeakPHONEMES_IPA; break; case T_PROCESS: @@ -497,7 +495,7 @@ void TranslDlg::OnCommand(wxCommandEvent& event) CalcPitches(translator,clause_tone); CalcLengths(translator); - phon_out2 = GetTranslatedPhonemeString(use_ipa); + phon_out2 = GetTranslatedPhonemeString(option_phonemes); if(clause_count++ > 0) strcat(phon_out," ||"); strcat(phon_out, phon_out2); @@ -515,7 +513,7 @@ void TranslDlg::OnCommand(wxCommandEvent& event) ph_list[N_PH_LIST].ph = NULL; // to recognize overrun off list (in Generate() ) t_phonetic->Clear(); - if(option_phonemes == 2) + if(option_phonemes & espeakPHONEMES_TRACE) { option_phonemes=0; rewind(f_trans);