diff --git a/CHANGELOG.md b/CHANGELOG.md index 20e20d62..6b701337 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,7 @@ new languages: * hak (Hakka Chinese) -- Chen Chien-ting * ht (Haitian Creole) -- Valdis Vitolins * kk (Kazakh) -- boracasli14, Valdis Vitolins +* py (Pyash) -- Logan Streondj * quc (K'iche') -- Valdis Vitolins * ru-lv (Russian Latvia) -- Valdis Vitolins * shn (Shan Tay Yai) -- ronaldaug diff --git a/Makefile.am b/Makefile.am index 2da400ae..3b0ad8fe 100644 --- a/Makefile.am +++ b/Makefile.am @@ -367,6 +367,7 @@ phsource/phonemes.stamp: \ phsource/ph_portugal \ phsource/ph_pt_brazil \ phsource/ph_punjabi \ + phsource/ph_pyash \ phsource/ph_romanian \ phsource/ph_russian \ phsource/ph_russian_lv \ @@ -522,6 +523,7 @@ dictionaries: \ espeak-ng-data/pap_dict \ espeak-ng-data/pl_dict \ espeak-ng-data/pt_dict \ + espeak-ng-data/py_dict \ espeak-ng-data/quc_dict \ espeak-ng-data/ro_dict \ espeak-ng-data/ru_dict \ @@ -754,6 +756,9 @@ espeak-ng-data/pl_dict: dictsource/pl_list dictsource/pl_rules dictsource/pl_ext pt: espeak-ng-data/pt_dict espeak-ng-data/pt_dict: dictsource/pt_list dictsource/pt_rules dictsource/pt_extra dictsource/pt_emoji +py: espeak-ng-data/py_dict +espeak-ng-data/py_dict: dictsource/py_list dictsource/py_rules dictsource/py_extra + quc: espeak-ng-data/quc_dict espeak-ng-data/quc_dict: dictsource/quc_list dictsource/quc_rules dictsource/quc_extra dictsource/quc_emoji diff --git a/README.md b/README.md index d0952b1b..2826101a 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ ---------- The eSpeak NG (Next Generation) Text-to-Speech program is an open source speech -synthesizer that supports [102 languages and accents](docs/languages.md), +synthesizer that supports [107 languages and accents](docs/languages.md), based on the eSpeak engine created by Jonathan Duddington. It supports spectral and Klatt formant synthesis, and the ability to use MBROLA voices. @@ -126,6 +126,12 @@ be installed using the following commands: | ronn | `sudo apt-get install ruby-ronn` | | kramdown | `sudo apt-get install ruby-kramdown` | +For recent Debian or Ubuntu >= 18.04 you should also install: + +| Dependency | Install | +|---------------|------------------------------------------------------------------| +| pcaudiolib | `sudo apt-get install libpcaudio-dev` | + ### Building The first time you build eSpeak NG, or when you want to change how to build @@ -282,20 +288,18 @@ In order to build the Android APK file, you need: 2. the [Android NDK](http://developer.android.com/tools/sdk/ndk/index.html); 3. Gradle 3.2.1 or later. -In order to use Android Studio, you will also need: - -1. [Android Studio](http://developer.android.com/sdk/installing/studio.html). - ### Building with Gradle 1. Set the location of the Android SDK: $ export ANDROID_HOME= (where `` is your actual path of SDK folder e.g. `/home/user/Android/Sdk`) + 2. Add location of NDK to the PATH variable: $ export PATH=$PATH: (where `` is your actual path of NDK folder, e.g. `/home/user/Android/Ndk`) + 3. Configure the project: $ ./autogen.sh @@ -308,6 +312,7 @@ Check that log shows following lines: ndk-build (Android): yes ... `` may be just `gradle` if it is found in your path by simple name. + 4. Build the project: $ make apk-release @@ -359,15 +364,9 @@ To enable eSpeak, you need to: ## Documentation -The [documentation](docs/README.md) for eSpeak NG provides: - -1. a user guide; -2. a guide for language and voice authors; and -3. details for developers. - -The [espeak-ng](src/espeak-ng.1.ronn) and [speak-ng](src/speak-ng.1.ronn) -command-line documentation provide a reference of the different command-line -options available to these commands with example usage. +1. [User guide](src/espeak-ng.1.ronn) provides reference and examples for command-line options. +2. [Language guide](docs/add_language.md) provides step-by-step instructions, how to add/improve support for language. +3. [Readme](docs/README.md) provides entries to more detailed information for contributors and developers. ## eSpeak Compatibility diff --git a/dictsource/de_list b/dictsource/de_list index 178b868f..9bddc6b4 100644 --- a/dictsource/de_list +++ b/dictsource/de_list @@ -32,7 +32,8 @@ _| St'A:b _: d'Op@lp,UNkt _; Str'ICpUNkt __ ,Unt3Str'IC -_- b'Ind@str,IC +_- b'Ind@str,IC +− mi:nUs _! 'aUs_|r,u:f@ts,aIC@n _? fr'Ag@ts,aIC@n _' ,apo:str'Of @@ -363,7 +364,7 @@ unserm Unz3m $u unserem Unz@r@m $u unseren Unz@r@n $u unserer $u - +unseres $u ihre i:r@ $u ihrem i:r@m $u ihrer i:r3 $u @@ -385,7 +386,7 @@ nur $brk jetzt j,Etst $strend2 schon S,o:n $strend2 einst 'aInst // not 'ein' + st -zwar tsv,a:r +zwar $u wo v,o: während $u @@ -452,13 +453,17 @@ kam ,kA:m // de_rules includes the words ending in "-ing" access _^_EN account _^_EN -aid _^_EN // aids +aid _^_EN +aids _^_EN +america _^_EN appeal _^_EN apple _^_EN association _^_EN baseball _^_EN bbc _^_EN beat _^_EN +britain _^_EN +british _^_EN browser _^_EN byte _^_EN bytes _^_EN @@ -477,15 +482,14 @@ computer kOmpj'u:t3 cool _^_EN copy _^_EN couch _^_EN +cover _^_EN cursor _^_EN daisy _^_EN date _^_EN debugger _^_EN -desktop d'EsktOp dj d'i:dZEI -download _^_EN -downloads _^_EN email _^_EN +empire _^_EN enterprise _^_EN escape _^_EN espeak _^_EN @@ -496,12 +500,13 @@ file _^_EN firefox _^_EN firewall _^_EN foul _^_EN -foyer _^_EN frame _^_EN freak _^_EN german _^_EN +germany _^_EN gin _^_EN google _^_EN +great _^_EN groupie _^_EN hip _^_EN homepage _^_EN @@ -516,6 +521,7 @@ joint _^_EN joke _^_EN joystick _^_EN junkie _^_EN +kingdom _^_EN laptop _^_EN laser _^_EN level _^_EN @@ -526,6 +532,7 @@ macho _^_EN mail _^_EN mailbox _^_EN message _^_EN +moodle _^_EN move _^_EN my _^_EN mysql _^_EN @@ -533,6 +540,10 @@ notebook _^_EN notepad _^_EN nugget _^_EN nvda _^_EN +nvaccess _^_EN +of _^_EN +office _^_EN +offices _^_EN offline _^_EN online _^_EN out _^_EN @@ -543,15 +554,17 @@ pidgin _^_EN player _^_EN plot _^_EN poster _^_EN +quiz _^_EN +reader _^_EN receiver _^_EN +recovery _^_EN registry _^_EN release _^_EN remake _^_EN research _^_EN +return _^_EN roadie _^_EN roastbeef _^_EN -quiz _^_EN -reader _^_EN run _^_EN running _^_EN save _^_EN @@ -571,13 +584,18 @@ slum _^_EN small _^_EN smiley _^_EN snob _^_EN +solution _^_EN song _^_EN sorry _^_EN source _^_EN +space _^_EN +spaces _^_EN spam _^_EN speak _^_EN spirit _^_EN squaw _^_EN +state _^_EN +states _^_EN stream _^_EN suite _^_EN sweatshirt _^_EN @@ -586,6 +604,10 @@ team _^_EN teaser _^_EN tech _^_EN terminal _^_EN +the _^_EN +their _^_EN +they _^_EN +this _^_EN thunderbird _^_EN time _^_EN timer _^_EN @@ -593,11 +615,14 @@ to _^_EN $only tool _^_EN trip _^_EN tuner _^_EN +turn _^_EN +united _^_EN unix _^_EN update _^_EN updates _^_EN venture _^_EN verify _^_EN +very _^_EN voice _^_EN voices _^_EN weather _^_EN @@ -605,6 +630,7 @@ web w'Eb $only website _^_EN window _^_EN wipe _^_EN +with _^_EN word _^_EN @@ -622,7 +648,6 @@ akkord $2 alarm $2 allein $2 allgemein 'alg@maIn -amerika $2 andre andr@ // andere aneinander an1aIn'and3 anomalie $2 @@ -642,24 +667,21 @@ automatisch $3 aventurin avEntu:r'i:n ave A:vE -bebung b'e:bUN baguette bag'Et balkan $1 balkon $2 -balance bal'A~s bandagier bandaZ'i:r beben be:b@n +bebung b'e:bUN beere be:r@ bestie bEstI@ best bEst bestem b'Est@m beta b'e:tA: beten be:t@n -bibliothek bi:bli:o:t'e:k bisschen b'IsC@n bizarr $2 blamage $alt -bourgeoisie bUrZwAz'i: braille braIj bronchie $alt buch b'u:x @@ -674,6 +696,7 @@ bürostuhl by:r'o:Stu:l changier SaNZ'i:r cembalo tS'Embalo: +centre center $text champagner Samp'anj3 champignon S'ampInjON ciao tSaU @@ -694,7 +717,6 @@ dragier draZ'i:r dritte drIt@ dschungel dZ'UN@l duett du:'Et -düst dy:st ebendaher e:b@ndah'e:r ebendahin e:b@ndah'In @@ -724,7 +746,7 @@ extravagant $1 extrem Ekstr'e:m foyer fOj'e: -friedvoll fr'i:tf,Ol +friedvoll fr'i:tfOl furchen fUrC@n furie $alt @@ -735,6 +757,8 @@ gegenständ $1 gegenüber ge:g@n_|'y:b3 geglichen g@glIC@n gemein g@maIn +gen ge:n +gene ge:n@ genial ge:nj'A:l geranie ge:r'A:nI@ gessen gEs@n @@ -742,6 +766,8 @@ geste ge:st@ gestern gEst3n gitarre $2 glorie $alt +grafem grA:f'e:m +graphem grA:f'e:m grazie $alt handy hEndi: @@ -784,6 +810,7 @@ inzwischen $2 jahrhundert $2 januar janu:A:r +kalender kal'End3 Kamel kam'e:l kamelie $alt kanäl $2 @@ -792,6 +819,7 @@ kartonage $alt kastanie $alt kid kId klops kl'Ops +kognak kOnjak kombinationsfeld $4 komödie $alt kompass $1 @@ -843,6 +871,7 @@ november $2 numero $1 oboe o:b'o:@ +orchester $2 orgie $alt ok o:k'e: oktober $2 @@ -857,26 +886,26 @@ pinie $alt planet plan'e:t pochier pOS'i:r pochs pOxs +portemonnaie pOrtmOn'e: präsident $3 prämie $alt prinzip $2 prinzipien prInts'i:pI@n -privatisier pri:vA:ti:z'i:r -problematisier $5 +protein pro:te:_|'i:n protokoll $3 +referendum $3 refrain rEfr'W~ -relevanz $3 reliquie $alt rendezvous rA~de:v'u: restaurant rEsto:r'A~ risik $1 +ruhezustand ru:@ts,u:Stand rupie $alt sabbat zabat sagt zA:gt salopp $2 -sarkasmus $2 schieberegler S'i:b@re:gl3 schokolad $3 schreibung Sr'aIbUN @@ -903,10 +932,8 @@ stalagmit stalagm'It subjekt $1 tag tA:g -teint t'W~ telegen te:le:g'e:n terrain tEr'W~ -the D@ // English theater te:'A:t3 tja tjA: tonnage $alt @@ -918,10 +945,12 @@ trost tr'o:st tsunami tsu:n'A:mi: turin tu:r'i:n +überschrift $1 umgehen $2 umrahmen $2 unten Unt@n untermenü 'Unt3me:n,y: +unterschrift $1 urin u:r'i:n übrig 'y:brIg# @@ -952,28 +981,98 @@ zymbal $1 // Names +Albanien $2 +adrian A:dri:A:n +Alditalk aldi:tO:k +Alea $2 +amerika $2 +Andorra and'OrA: +Andrea andr'e:A: +Andreas andr'e:A:s +Anika ani:kA: Armin $1 -chopin SOp'W~ +aserbaidschan A:z3baIdZ'A:n +Asien A:zI@n +Bremerhaven bre:m3h'Af@n +Cathleen katle:n +Cedric sEdrIk +Chiara kjA:rA: +Chris krIs +Christian $1 +Christina $2 +Daniel dA:nI@l +Daniela danj'e:lA: Djakarta dZak'artA: Djibouti dZi:b'u:ti: +duisburg dy:sbUrg +Eric e:rIk +Erik e:rIk +florian $1 Fruecht fr'yCt Georg ge:Ork $only George dZO:rdZ -ines 'i:n@s -john dZ'On +gibraltar $2 +Gina dZi:nA: +hannover han'o:f3 +Herzegowina hErtse:g'Ovi:nA +Ines i:n@s +Italien i:t'A:lI@n +Johann jo:han +Johanna jo:h'anA: +Johannes jo:h'an@s +John dZOn +Jon dZOn +jonatan $1 +jonathan jonatan $text +jonny dZOni: Josef j'o:zEf +Katharina katar'i:nA: +Kasachstan $1 +Kirgisien $2 Klango kl'aNgo: Khmer kme:r -liam _^_EN +kosovo kOso:vo: +kristina $2 +kroatien kro:'A:tsI@n +Leon le:On +Leonie $1 +Liam _^_EN +Lüneburg ly:n@bUrg +Maria $2 +Marian $1 +Marlene marl'e:n@ +mathias mat'i:A:s +Matthias mathias $text +Matias mathias $text +Mattias mathias $text Mc %mEk +michael mICae:l +michaela mICa'e:lA: +Montenegro mOnt@n'e:gro: Moradi $2 +münchen mynC@n +naomi $2 Neumexiko $2 Neuseeland $2 +nordrhein nOrd||raIn +portugal pOrtu:gal +Rumänien $2 Rwanda rU'andA: +san %zan +saarbrücken $2 +schlesien Sle:zI@n +schleswig Sle:svIg# +Sebastian $2 +slowenien $2 Sri %sri: steve _^_EN +soest zo:st +sultan $1 Tom tOm $only Tim tIm $only +Turkmenistan $2 +ukraine UkrA'i:n@ +vatikanstadt vA:ti:k'A:nStat vera v'e:rA: verena ve:r'e:nA: - +westfalen $2 diff --git a/dictsource/de_rules b/dictsource/de_rules index 73186904..482f671d 100644 --- a/dictsource/de_rules +++ b/dictsource/de_rules @@ -53,6 +53,7 @@ au aU auh (_ aU auer aU3 + mold) auisch aUIS ab (t_ A:p ag (t_ A:k @@ -79,6 +80,7 @@ _) abzu (@P4 'aptsu: _) ac (et ats _) ad (ju at + afgh afg _) an (@P2 'an _) an (a %an _) a (natioP1 'A: @@ -96,6 +98,8 @@ _) an (nL03hP2 'an _) anti (@P4 ,antI _) an (tw an + apo (thek apo: + emp) athisch A:tIS _) auf (@P3 _!'aUf _) aus (@P3 _!'aUs _) aus (ku aUs @@ -153,7 +157,7 @@ a (rch_ 'A: @) at (_ 'A:t @) atisch (_S6 'A:tIS - @) atisieren (_S9 A:tIs'i:r@n + @) atisieren (_S9 A:ti:z'i:r@n a (tion a _) ato (m %ato: _) au (Ceinand aU @@ -185,6 +189,7 @@ r p) ay EI _) beige (_ be:S _) beige (@ baIg@ _) be (inhP2 b@ + bet (_ b'e:t _) ba (lA b%a _) ba (ll@ b%a @@ -215,6 +220,8 @@ r p) ay EI _o) b (C p baby _^_EN + bela (rus %bEl%a + bergisch bErgIS beten be:t@n bestimm %b@StIm _) bike _^_EN @@ -241,7 +248,7 @@ r p) ay EI fa) c (et ts _) cey tsaI chef (_ SEf - _) c (ent ts + _) c (ent s c (ie s pla) c (ie ts coat (_ _^_EN @@ -355,6 +362,7 @@ r p) ay EI .group e _) e (_ e: e e: + &) eau (_ 'o: ee e: eh (+ e: @@ -370,7 +378,6 @@ r p) ay EI eb (t_ e:p eg (t_ e:k - enz (_ 'Ents eth e:t een (_ 'e:@n @@ -418,7 +425,9 @@ r p) ay EI &) eres (_S4 @r@s er (d_ e:r &) er (r_ E - w) er (k_ Er + er (g Er + erg (_ Erg + erk (_ Erk &) erin (_ @rIn &) erisch (_ @rIS exp) er (t Er @@ -461,7 +470,7 @@ r p) ay EI _) elen e:lEn mod) e (l@ E s) e (lig e: - _) emp (@P3 _|%Emp + _) emp (@ %Emp _) emph (@ %Emf _) emp (ir %Emp br) ems Ems // brems-t, not brem-st @@ -676,7 +685,7 @@ r p) ay EI @) ig (+ Ig# // [ig] or [iC] igh (K _^_EN ine (_ 'i:n@ - inen (_ 'i:n@n + inen (_ i:n@n i (i i:_! @@ -711,6 +720,8 @@ r p) ay EI @) is (_ Is &) isch (_ =IS is (mus_ 'Is + istan =IstA:n + istisch (_ 'IstIS @) ist (_ 'Ist @) it (_N 'It @) ite (_ 'i:t@ @@ -809,6 +820,7 @@ formal) ie =I@ lady _^_EN _) land (C@P4 l'ant _) landes (@P6 l'and@s + &) ländisch l,EndIS _) lang (C@P4 l'aN _) lang (t@ l'aN langsam l'aNzA:m @@ -838,6 +850,7 @@ formal) ie =I@ &) lichstes (_S8 l2ICst@s &) lichkeit (_S8 l2ICkaIt &) lichung (_S7 l2IC%UN + load _^_EN @) lo (gisch l'o: dia) log lo:g _) luft (CP4 l'Uft @@ -973,6 +986,9 @@ formal) ie =I@ papier pap'i:r _) para (@ p,ara passagie pasaZ'i: + path (_ p'At + pathin (_ p'AtIn + pathisch (_ p'A:tIS _) peri p,e:ri: _) perio p,e:rIo: _) periphe p,e:ri:fe: @@ -1024,6 +1040,7 @@ formal) ie =I@ rangier rA:NZ'i:r _) re (d re: register re:g'Ist@r + reichisch raICIS ressourc rEs'Urs revers r%e:vErs @@ -1046,7 +1063,6 @@ formal) ie =I@ _) sch (mA S _) sch (nA S _) sch (w S -schenk SENk _) sh (A S _) sh (rA S _) s (kA s // allow _sk @@ -1059,7 +1075,6 @@ schenk SENk _) s (plA S _) s (plend s _) s (prA S - spräch SprE:C _) s (quA s _) s (tA S _) s (trA S @@ -1068,6 +1083,7 @@ schenk SENk _) s (zA s sch S + schenk SENk sh (K S sou (nd saU p) s (a s @@ -1100,7 +1116,7 @@ schenk SENk st (art St st (ä St st (eh St - st (off St + stein (_ StaIn st (ö St st (rich St st (ü St @@ -1108,6 +1124,8 @@ schenk SENk st (uh St st (ung st + sachse zaks@ + &) sächsisch zEksIS _) safe _^_EN &) schaft (_S6 Saft @@ -1133,12 +1151,13 @@ schenk SENk seku (nden ze:k'U _) selbst (@@P6 z'Elpst service (_S7 z%Ervi:s + share (ware SE:r shop _^_EN _) sky _^_EN + soft (ware sOft soldat z%OldA:t &) so (rt_ s_|O summe zUm@ - synaps zy:n'aps speed _^_EN stau) ss s @@ -1157,6 +1176,7 @@ schenk SENk _) t (_ te: t t t) t + th t _) th (A t // allow _th _) th (rA t // allow _thr th (K t @@ -1202,6 +1222,12 @@ schenk SENk _) teen _^_EN _) tele (@ t,e:le: _) thermo tErmo: + &) thek t'e:k + &) thekar te:k'A:r + &) thekarin te:k'ArIn + &) thekerin t'e:k@rIn + top tOp + toph tOf touch _^_EN tuerei (_ tu:@r'aI thrill _^_EN @@ -1213,6 +1239,7 @@ schenk SENk @) tion (_ tsj'o:n _) trail _^_EN _) tranqu _^_EN + translat _^_EN traver tr%avEr _) tw _^_EN @@ -1303,7 +1330,6 @@ schenk SENk väter fE:t3 _) v (ati_ f _) v (ät f - vers (_ v'Erz _) v (ie f _) v (iet v _) v (iz f @@ -1375,7 +1401,7 @@ schenk SENk @) wert (_ ve:rt _) wh _^_EN - &) ware (_ _^_EN + &) ware (_ wE:r _) wasch (@P5 v'aS _) wasser (@P6 v'as@r _) weit (C@P4 v'aIt @@ -1390,6 +1416,7 @@ schenk SENk _) wovor vo:f'o:r _) wohl (@P4 v'o:l work _^_EN + württem (berg vyrt@m .group x @@ -1420,6 +1447,7 @@ schenk SENk _) zer (@P3 tsEr _) zere (b tse:re: _) zere (m tse:re: + kon) zert ts'Ert ziell tsj'El _) zie (ge@P3 ts'i: zitat tsi:t'A:t @@ -1464,6 +1492,7 @@ schenk SENk ö (C% W ö (CC W ö (sch W + öster Y:st3r .group ü diff --git a/dictsource/py_list b/dictsource/py_list new file mode 100644 index 00000000..f159591c --- /dev/null +++ b/dictsource/py_list @@ -0,0 +1,193 @@ + +// This file is UTF8 encoded +// Spelling to phoneme words for Pyash (an artificial constructed language). + +// Note: initial/final "." has already been removed + + +// How Number ASCII is pronounced +_0 zRon +_1 hjik +_2 tjut +_3 tjin +_4 ksas +_5 hfak +_6 hlis +_7 hsip +_8 hwap +_9 twun +_A htip +_B slen +_C tfat +_D tses +_E hses +_F hpet +_dpt fjih + + +// how letters are pronounced individually +_a a +b b@ +c S@ +d d@ +_e e +f f@ +g g@ +h h@ +_i i +j Z@ +k k@ +l l@ +m m@ +n n@ +_o o +p p@ +q N@ +r R@ +s s@ +t t@ +_u u +v v@ +w w@ +x x@ +y j@ +z z@ + + + +// stressed cmavo +//cai S'aI_! +//cu'i S'uhi_! +//pei p'eI_! +//ru'e R'uhe_! +//sai s'aI_! +//nai n'aI_! +//na n'a_! +//ja'a Z'aha_! + + +// unstressed words. Note single-syllable cmavo are all unstressed in jbo_rules +//e'o $u+ // request +//po'e $u+ // of +//zo'e $u+ // pronoun +// +// +//i i_: $u // sentence break (recognised by eSpeak program). Try a short pause after ".i" + +// end-of-clause [_;_] before these +//noi _;_noI $u +//poi _;_poI $u +//no'u _;_nohu $u +//po'u _;_pohu $u +//goi _;_goI $u +// +//ija _;_iZa // should this series be unstressed? +//ijanai _;_iZan'aI +//ije _;_iZe +//ije'i _;_iZehi +//ijenai _;_iZenaI +//ijo _;_iZo +//ijonai _;_iZon'aI +//inaja _;_inaZa +// +//to _::to $u // start parenthesis, pause but don't raise intonation + +// independent clause terminators (include a long pause after) +li li_:: $u +tu tu_:: $u +cu cu_:: $u +si si_:: $u +ri ri_:: $u +di di_:: $u +tcih tcih_:: $u +lo lo_:: $u +cyih cjih_:: $u +dwih dwih_:: $u +pcih pcih_:: $u +psih psih_:: $u +tseh tseh_:: $u +twuh twuh_:: $u +rwih rwih_:: $u +jwih jwih_:: $u +mwih mwih_:: $u +mu mu_:: $u +nwoh nwoh_:: $u +lu lu_:: $u +byih bjih_:: $u +kcuh kcuh_:: $u +dyah djah_:: $u +pceh pceh_:: $u +pruh pruh_:: $u +swuh swuh_:: $u +ru ru_:: $u +ksuh ksuh_:: $u +t6 t@_:: $u +zlih zlih_:: $u +n6 n@_:: $u +gyih gjih_:: $u +//pi7 pi55_:: $u +//si2 si22_:: $u + + +// case terminators (short pause after) +na na_: $u +ka ka_: $u +ta ta_: $u +wu wu_: $u +ti ti_: $u +ma ma_: $u +yi ji_: $u +yu ju_: $u +mwah mwah_: $u +pwah pwah_: $u +swih swih_: $u +da da_: $u +te te_: $u +ga ga_: $u +so so_: $u +pwih pwih_: $u +twah twah_: $u +twih twih_: $u +myah mjah_: $u +lwah lwah_: $u +lwih lwih_: $u +ksih ksih_: $u +tweh tweh_: $u +nweh nweh_: $u +lweh lweh_: $u +we we_: $u +twoh twoh_: $u +de de_: $u +nwah nwah_: $u +tloh tloh_: $u +nyeh njeh_: $u +sweh sweh_: $u +txih txih_: $u +gvih gvih_: $u +ryoh rjoh_: $u +psuh psuh_: $u +pxeh pxeh_: $u +pxoh pxoh_: $u +dxoh dxoh_: $u +greh greh_: $u +rweh rweh_: $u +xwih xwih_: $u +kxeh kxeh_: $u +lwoh lwoh_: $u +bvah bvah_: $u +dvah dvah_: $u +je je_: $u +gveh gveh_: $u +vwih vwih_: $u +bveh bveh_: $u +dzih dzih_: $u +//tsi7h tsi55h_: $u +vyah vjah_: $u +gvah gvah_: $u +zreh zreh_: $u +bu bu_: $u +//sa7 sa55_: $u +//si7 si55_: $u +//tsi2h tsi22h_: $u +//ta7 ta55_: $u + diff --git a/dictsource/py_rules b/dictsource/py_rules new file mode 100644 index 00000000..776d9926 --- /dev/null +++ b/dictsource/py_rules @@ -0,0 +1,107 @@ + +// This file is UTF8 encoded +// Spelling to phoneme rules for Pyash (an artificial constructed language). + +// Note: initial/final "." has already been removed + +.group a + a a + +.group b + b b + +.group c + c S + +.group d + d d + +.group e + e e + +.group f + f f + +.group g + g g + +.group h + h h + +.group i + i i + +.group j + j Z + +.group k + k k + +.group l + l l + +.group m + m m + +.group n + n n + +.group o + o o + +.group p + p p + +.group q + q N + +.group r + r R + + +.group s + s s + +.group t + t t + +.group u + u u + +.group v + v v + +.group w + w w + +.group x + x x + +.group y + y j + +.group 6 + 6 @ + +.group h + h h + +.group z + z z + +// low tone +.group 2 22 +// high tone +.group 7 55 + +.group + . _! // dot + _) . (@P1 _! // remove . prefix + . (_S1 _! // remove . suffix + + + ˈ ' // U+2c8 stress marker (from syllable capitalisation) +// tones not working +//.group +// 1 55 +// 2 22 diff --git a/dictsource/vi_rules b/dictsource/vi_rules index a90f3347..059ac139 100644 --- a/dictsource/vi_rules +++ b/dictsource/vi_rules @@ -84,6 +84,7 @@ ỵ ỵ .L03 ch nh .L04 a u ă â o ô á à ả ã ạ ù ú ủ ũ ụ ắ ằ ẳ ẵ ặ ấ ầ ẩ ẫ ậ ó ò ỏ õ ọ ố ồ ổ ỗ ộ ư ứ ừ ử ữ ự ơ ớ ờ ở ỡ ợ .L05 o ó ò ỏ õ ọ ô ố ồ ộ ỗ ổ + .group b b b _) b _b @@ -267,7 +268,13 @@ ỵ ỵ .group q q k q (_ k - qu kw //kw + qu kw //kw + quô ku@ + quồ ku@2 + quố ku@3 + quổ ku@4 + quỗ ku@5 + quộ ku@6 @@ -357,47 +364,47 @@ ỵ ỵ .group a a a: - ai a:I - aì a:I2 - aí a:I3 - aỉ a:I4 - aĩ a:I5 - aị a:I6 - ay aI + ai a:j + aì a:j2 + aí a:j3 + aỉ a:j4 + aĩ a:j5 + aị a:j6 + ay aj ?2 ay a:I - aý aI3 - aỷ aI4 - aỹ aI5 - aỵ aI6 - ao a:U - aò a:U2 - aó a:U3 - aỏ a:U4 - aõ a:U5 - aọ a:U6 - au aU + aý aj3 + aỷ aj4 + aỹ aj5 + aỵ aj6 + ao a:w + aò a:w2 + aó a:w3 + aỏ a:w4 + aõ a:w5 + aọ a:w6 + au aw ?2 au a:U - aù aU2 - aú aU3 - aủ aU4 - aũ aU5 - aụ aU6 + aù aw2 + aú aw3 + aủ aw4 + aũ aw5 + aụ aw6 a (L01 _^_EN ai (L02 _^_EN a (@ _^_EN - a (L03 a + a (L03 e- .group à à a:2 - ài a:I2 - ày aI2 + ài a:j2 + ày aj2 ?2 ày a:I2 - + à (L03 e-2 @@ -405,47 +412,51 @@ ỵ ỵ - ào a:U2 - àu aU2 + ào a:w2 + àu aw2 ?2 àu a:U2 .group á á a:3 - ái a:I3 - áy aI3 - áo a:U3 - áu aU3 + ái a:j3 + áy aj3 + áo a:w3 + áu aw3 ?2 áu a:U3 ?2 áy a:I3 - + á (L03 e-3 + .group ả ả a:4 - ải a:I4 - ảy aI4 - ảo a:U4 - ảu aU4 + ải a:j4 + ảy aj4 + ảo a:w4 + ảu aw4 ?2 ảu a:U4 ?2 ảy a:I4 + ả (L03 e-4 .group ã ã a:5 - ãi a:I5 - ãy aI5 - ão a:U5 - ãu aU5 + ãi a:j5 + ãy aj5 + ão a:w5 + ãu aw5 ?2 ãu a:U5 ?2 ãy a:I5 + ã (L03 e-5 .group ạ ạ a:6 - ại a:I6 - ạy aI6 - ạo a:U6 - ạu aU6 + ại a:j6 + ạy aj6 + ạo a:w6 + ạu aw6 ?2 ạu a:U6 ?2 ạy a:I6 + ạ (L03 e-6 //================================ @@ -504,7 +515,7 @@ ỵ ỵ .group â â @ ây @I - âu @U1 + âu @w1 ?2 â (L03 a ?1 â (L03 a @@ -515,7 +526,7 @@ ỵ ỵ .group ầ ầ @2 ầy @I2 - ầu @U2 + ầu @w2 ?2 ầ (L03 a2 ?1 ầ (L03 a2 @@ -526,7 +537,7 @@ ỵ ỵ .group ấ ấ @3 ấy @I3 - ấu @U3 + ấu @w3 ?2 ấ (L03 a3 ?1 ấ (L03 a3 @@ -537,7 +548,7 @@ ỵ ỵ .group ẩ ẩ @4 ẩy @I4 - ẩu @U4 + ẩu @w4 @@ -548,7 +559,7 @@ ỵ ỵ .group ẫ ẫ @5 ẫy @I5 - ẫu @U5 + ẫu @w5 @@ -559,7 +570,7 @@ ỵ ỵ .group ậ ậ @6 ậy @I6 - ậu @U6 + ậu @w6 ?2 ậ (L03 a6 ?1 ậ (L03 a6 @@ -567,12 +578,12 @@ ỵ ỵ //=========================== .group e e E - eo EU - eò EU2 - eó EU3 - eỏ EU4 - eỗ EU5 - eọ EU6 + eo Ew + eò Ew2 + eó Ew3 + eỏ Ew4 + eỗ Ew5 + eọ Ew6 e (L01 _^_EN ey (_ _^_EN e (@ _^_EN @@ -581,7 +592,7 @@ ỵ ỵ .group è è E2 - èo EU2 + èo Ew2 @@ -591,7 +602,7 @@ ỵ ỵ .group é é E3 - éo EU3 + éo Ew3 @@ -601,7 +612,7 @@ ỵ ỵ .group ẻ ẻ E4 - ẻo EU4 + ẻo Ew4 @@ -611,7 +622,7 @@ ỵ ỵ .group ẽ ẽ E5 - ẽo EU5 + ẽo Ew5 @@ -621,7 +632,7 @@ ỵ ỵ .group ẹ ẹ E6 - ẹo EU6 + ẹo Ew6 @@ -632,7 +643,7 @@ ỵ ỵ .group ê ê e - êu eU1 + êu ew1 ?2 ê (L03 @: ?2 ê (L02 @: @@ -640,7 +651,7 @@ ỵ ỵ .group ề ề e2 - ều eU2 + ều ew2 ?2 ề (L03 @:2 ?2 ề (L02 @:2 @@ -648,7 +659,7 @@ ỵ ỵ .group ế ế e3 - ếu eU3 + ếu ew3 ?2 ế (L03 @:3 @@ -656,7 +667,7 @@ ỵ ỵ .group ể ể e4 - ểu eU4 + ểu ew4 ?2 ể (L03 @:4 ?2 ể (L02 @:4 @@ -664,7 +675,7 @@ ỵ ỵ .group ễ ễ e5 - ễu eU5 + ễu ew5 ?2 ễ (L03 @:5 ?2 ễ (L02 @:5 @@ -672,7 +683,7 @@ ỵ ỵ .group ệ ệ e6 - ệu eU6 + ệu ew6 ?2 ệ (L03 @:6 ?2 ệ (L02 @:6 @@ -683,7 +694,7 @@ ỵ ỵ .group i i i - //i (A j + A) i j ia i@ ià i@2 iá i@3 @@ -696,18 +707,18 @@ ỵ ỵ iể iE4 iễ iE5 iệ iE6 - iu iU - iù iU2 - iú iU3 - iủ iU4 - iũ iU5 - iụ iU6 - iêu iU - iều iU2 - iếu iU3 - iểu iU4 - iễu iU5 - iệu iU6 + iu iw + iù iw2 + iú iw3 + iủ iw4 + iũ iw5 + iụ iw6 + iêu iEw + iều iEw2 + iếu iEw3 + iểu iEw4 + iễu iEw5 + iệu iEw6 i (L01 _^_EN i (@ _^_EN ?2 i (L03 @ @@ -718,7 +729,7 @@ ỵ ỵ ì i2 ì (A j2 ìa i@2 - ìu iU2 + ìu iw2 ?2 ì (L03 @2 ?1 ì (L03 @2 ?2 ì (L02 @2 @@ -727,7 +738,7 @@ ỵ ỵ í i3 í (A j3 ía i@3 - íu iU3 + íu iw3 ?2 í (L03 @3 ?1 í (L03 @3 ?2 í (L02 @3 @@ -736,7 +747,7 @@ ỵ ỵ ỉ i4 ỉ (A j4 ỉa i@4 - ỉu iU4 + ỉu iw4 ?2 ỉ (L03 @4 ?1 ỉ (L03 @4 ?2 ỉ (L02 @4 @@ -747,7 +758,7 @@ ỵ ỵ ĩ i5 ĩ (A j5 ĩa i@5 - ĩu iU5 + ĩu iw5 ?2 ĩ (L03 @5 ?1 ĩ (L03 @5 ?2 ĩ (L02 @5 @@ -758,7 +769,7 @@ ỵ ỵ ị i6 ị (A j6 ịa i@6 - ịu iU6 + ịu iw6 ?2 ị (L03 @6 ?1 ị (L03 @6 ?2 ị (L02 @6 @@ -770,42 +781,18 @@ ỵ ỵ .group o o O - oa o@ // modify oa sound example: hoa,khoa // o (A w - oà o@2 - oá o@3 - oả o@4 - oã o@5 - oạ o@6 + o (A w + oi Oj oo O - oi OI - oì OI2 - oí OI3 - oỉ OI4 - oĩ OI5 - oị OI6 - ong O# - oe o& // Adding oe sound example: lóe sáng,toét mắt - oai Oi // oai sound - o (@ _^_EN - oại Oi6 - oài Oi2 - oái Oi3 - oải Oi4 - oãi Oi5 - oă o@1 - oằ o@2 - oắ o@3 - oẳ o@4 - oẵ o@5 - oặ o@6 - oc O#k + ong O#N + oc O#k + .group ò ò O2 - òi OI2 - òa o@2 //ò (A w2 - òng O#2 - òe o&2 + òa wa:2 //ò (A w2 + òng O#N2 + òe wE2 @@ -815,10 +802,9 @@ ỵ ỵ .group ó ó O3 - ói OI3 - óa o@3 //ó (A w3 - óng O#3 - óe o&3 + óa wa:3 //ó (A w3 + óng O#N3 + óe wE3 óc O#3k @@ -828,10 +814,9 @@ ỵ ỵ .group ỏ ỏ O4 - ỏi OI4 - ỏa o@4 //ỏ (A w4 - ỏng O#4 - ỏe o&4 + ỏa wa:4 //ỏ (A w4 + ỏng O#N4 + ỏe wE4 @@ -841,10 +826,9 @@ ỵ ỵ .group õ õ O5 - õi OI5 - õa o@5 //õ (A w5 - õng O#5 - õe o&5 + õa wa:5 //õ (A w5 + õng O#N5 + õe wE5 @@ -854,10 +838,9 @@ ỵ ỵ .group ọ ọ O6 - ọi OI6 - ọa o@6 //ọ (A w6 - ọng O#6 - ọe o&6 + ọa oa:6 //ọ (A w6 + ọng O#N6 + ọe wE6 ọc O#6k @@ -870,16 +853,16 @@ ỵ ỵ .group ô ô o - ôi oI - ông o# // ông sound + ôi oj + ông o#N // ông sound ?2 ôi O- //south dialect - + ôc o#k .group ồ ồ o2 - ồi oI2 - ồng o#2 + ồi oj2 + ồng o#N2 ?2 ồi O-2 @@ -888,18 +871,18 @@ ỵ ỵ .group ố ố o3 - ối oI3 - ống o#3 + ối oj3 + ống o#N3 ?2 ối O-3 - + ốc o#3k .group ổ ổ o4 - ổi oI4 - ổng o#4 + ổi oj4 + ổng o#N4 ?2 ổi O-4 @@ -908,8 +891,8 @@ ỵ ỵ .group ỗ ỗ o5 - ỗi oI5 - ỗng o#5 + ỗi oj5 + ỗng o#N5 ?2 ỗi O-5 @@ -918,10 +901,10 @@ ỵ ỵ .group ộ ộ o6 - ội oI6 - // ộng o#6 + ội oj6 + ộng o#N6 ?2 ội O-6 - + ộc o#6k @@ -931,7 +914,7 @@ ỵ ỵ .group ơ ơ @: - ơi @:I + ơi @:j ơu @:U ?2 ơi @- //south dialect @@ -941,7 +924,7 @@ ỵ ỵ .group ờ ờ @:2 - ời @:I2 + ời @:j2 ờu @:U2 ?2 ời @-2 @@ -951,7 +934,7 @@ ỵ ỵ .group ớ ớ @:3 - ới @:I3 + ới @:j3 ớu @:U3 ?2 ới @-3 @@ -961,7 +944,7 @@ ỵ ỵ .group ở ở @:4 - ởi @:I4 + ởi @:j4 ởu @:U4 ?2 ởi @-4 @@ -971,7 +954,7 @@ ỵ ỵ .group ỡ ỡ @:5 - ỡi @:I5 + ỡi @:j5 ỡu @:U5 ?2 ỡi @-5 @@ -981,7 +964,7 @@ ỵ ỵ .group ợ ợ @:6 - ợi @:I6 + ợi @:j6 ợu @:U6 ?2 ợi @-6 @@ -994,14 +977,15 @@ ỵ ỵ .group u u u - u (A u + u (A w A) u w - ui uI - uì uI2 - uí uI3 - uỉ uI4 - uĩ uI5 - uị uI6 + gi) u u + ui uj + uì uj2 + uí uj3 + uỉ uj4 + uĩ uj5 + uị uj6 ua u@ uà u@2 uá u@3 @@ -1024,15 +1008,19 @@ ỵ ỵ u (L01 _^_EN u (@ _^_EN // ua (L01 _^_EN -?2 u u- - - +?2 u u- + uyu wiw + uỳu wiw2 + uýu wiw3 + uỷu wiw4 + uỹu wiw5 + uỵu wiw6 .group ù ù u2 - ù (A u2 - ùy ui2 - ùi uI2 + ù (A w2 + ùy wi2 + ùi uj2 ùa u@2 //ùng u#2 @@ -1043,9 +1031,9 @@ ỵ ỵ .group ú ú u3 - ú (A u3 - úy ui3 - úi uI3 + ú (A w3 + úy wi3 + úi uj3 úa u@3 //úng u#3 ?2 ú u-3 @@ -1056,9 +1044,9 @@ ỵ ỵ .group ủ ủ u4 - ủ (A u4 - ủy ui4 - ủi uI4 + ủ (A w4 + ủy wi4 + ủi uj4 ủa u@4 //ủng u#4 @@ -1069,9 +1057,9 @@ ỵ ỵ .group ũ ũ u5 - ũ (A u5 - ũy ui5 - ũi uI5 + ũ (A w5 + ũy wi5 + ũi uj5 ũa u@5 //ũng u#5 ?2 ũ u-5 @@ -1082,9 +1070,9 @@ ỵ ỵ .group ụ ụ u6 - ụ (A u6 - ụy ui6 - ụi uI6 + ụ (A w6 + ụy wi6 + ụi uj6 ụa u@6 //ụng u#6 ?2 ụ u-6 @@ -1096,7 +1084,6 @@ ỵ ỵ .group ư ư y - ưi yI ưa y@ ươ y@ ườ y@2 @@ -1104,7 +1091,7 @@ ỵ ỵ ưở y@4 ưỡ y@5 ượ y@6 - ưu yw + ưu iw ươi y@j ười y@j2 ưới y@j3 @@ -1126,9 +1113,8 @@ ỵ ỵ .group ừ ừ y2 - ừi yI2 ừa y@2 - ừu y2w2 + ừu iw2 @@ -1138,9 +1124,8 @@ ỵ ỵ .group ứ ứ y3 - ứi yI3 ứa y@3 - ứu y3w3 + ứu iw3 @@ -1150,9 +1135,8 @@ ỵ ỵ .group ử ử y4 - ửi yI4 ửa y@4 - ửu y4w4 + ửu iw4 @@ -1162,9 +1146,8 @@ ỵ ỵ .group ữ ữ y5 - ữi yI5 ữa y@5 - ữu y5w5 + ữu iw5 @@ -1174,9 +1157,8 @@ ỵ ỵ .group ự ự y6 - ựi yI6 ựa y@6 - ựu y6w6 + ựu iw6 @@ -1194,12 +1176,12 @@ ỵ ỵ yả i@4 yã i@5 yạ i@6 - yê i@ - yề i@2 - yế i@3 - yể i@4 - yễ i@5 - yệ i@6 + yê iE + yề iE2 + yế iE3 + yể iE4 + yễ iE5 + yệ iE6 // yêu i@U y (L01 _^_EN bu) y _^_EN diff --git a/docs/languages.md b/docs/languages.md index d5b123b5..e1514a19 100644 --- a/docs/languages.md +++ b/docs/languages.md @@ -8,7 +8,7 @@ and dialects, [private-use extensions](https://raw.githubusercontent.com/espeak-ng/bcp47-data/master/bcp47-extensions) have been used. -The 102 supported languages and accents are: +The 107 supported languages and accents are: | Family Code | Identifier | Language Family | Language | Accent/Dialect | |-------------|-------------------|-----------------------|-----------------------------|------------------------| @@ -35,21 +35,21 @@ The 102 supported languages and accents are: | `zlw` | `cs` | West Slavic | Czech | | | `gmq` | `da` | North Germanic | Danish | | | `gmw` | `nl` | West Germanic | Dutch | | -| `gmw` | `en-US` | West Germanic | English | American | +| `gmw` | `en-us` | West Germanic | English | American | | `gmw` | `en` | West Germanic | English | British | | `gmw` | `en-029` | West Germanic | English | Caribbean | -| `gmw` | `en-GB-x-gbclan` | West Germanic | English | Lancastrian | -| `gmw` | `en-GB-x-rp` | West Germanic | English | Received Pronunciation | -| `gmw` | `en-GB-scotland` | West Germanic | English | Scottish | -| `gmw` | `en-GB-x-gbcwmd` | West Germanic | English | West Midlands | +| `gmw` | `en-gb-x-gbclan` | West Germanic | English | Lancastrian | +| `gmw` | `en-gb-x-rp` | West Germanic | English | Received Pronunciation | +| `gmw` | `en-gb-scotland` | West Germanic | English | Scottish | +| `gmw` | `en-gb-x-gbcwmd` | West Germanic | English | West Midlands | | `art` | `eo` | Constructed | Esperanto | | | `urj` | `et` | Uralic | Estonian | | | `ira` | `fa` | Iranian | Persian | | -| `ira` | `fa-Latn` | Iranian | Persian\[2\] | | +| `ira` | `fa-latn` | Iranian | Persian\[2\] | | | `urj` | `fi` | Uralic | Finnish | | -| `roa` | `fr-BE` | Romance | French | Belgium | +| `roa` | `fr-be` | Romance | French | Belgium | | `roa` | `fr` | Romance | French | France | -| `roa` | `fr-CH` | Romance | French | Switzerland | +| `roa` | `fr-ch` | Romance | French | Switzerland | | `cel` | `ga` | Celtic | Gaelic | Irish | | `cel` | `gd` | Celtic | Gaelic | Scottish | | `ccs` | `ka` | South Caucasian | Georgian | | @@ -71,6 +71,7 @@ The 102 supported languages and accents are: | `inc` | `kok` | Indic | Konkani | | | | `ko` | | Korean | | | `ira` | `ku` | Iranian | Kurdish | | +| `trk` | `kk` | Turkic | Kazakh | | | `trk` | `ky` | Turkic | Kyrgyz | | | `itc` | `la` | Italic | Latin | | | `bat` | `lv` | Baltic | Latvian | | @@ -89,15 +90,19 @@ The 102 supported languages and accents are: | `inc` | `or` | Indic | Oriya | | | `cus` | `om` | Cushitic | Oromo | | | `roa` | `pap` | Romance | Papiamento | | +| `art` | `py` | Constructed | Pyash | | | `zlw` | `pl` | West Slavic | Polish | | -| `roa` | `pt-BR` | Romance | Portuguese | Brazillian | +| `roa` | `pt-br` | Romance | Portuguese | Brazillian | +| `myn` | `quc` | Mayan | K'iche' | | | `roa` | `pt` | Romance | Portuguese | Portugal | | `inc` | `pa` | Indic | Punjabi | | | `roa` | `ro` | Romance | Romanian | | | `zle` | `ru` | East Slavic | Russian | | +| `zle` | `ru-lv` | East Slavic | Russian | Latvia | | `zls` | `sr` | South Slavic | Serbian | | | `bnt` | `tn` | Bantu | Setswana | | | `inc` | `sd` | Indic | Sindhi | | +| `tai` | `shn` | Tai | Shan (Tai Yai) | | | `inc` | `si` | Indic | Sinhala | | | `zlw` | `sk` | West Slavic | Slovak | | | `zls` | `sl` | South Slavic | Slovenian | | @@ -110,9 +115,9 @@ The 102 supported languages and accents are: | `dra` | `te` | Dravidian | Telugu | | | `trk` | `tr` | Turkic | Turkish | | | `inc` | `ur` | Indic | Urdu | | -| `aav` | `vi-VN-x-central` | Austroasiatic | Vietnamese | Central Vietnam | +| `aav` | `vi-vn-x-central` | Austroasiatic | Vietnamese | Central Vietnam | | `aav` | `vi` | Austroasiatic | Vietnamese | Northern Vietnam | -| `aav` | `vi-VN-x-south` | Austroasiatic | Vietnamese | Southern Vietnam | +| `aav` | `vi-vn-x-south` | Austroasiatic | Vietnamese | Southern Vietnam | | `cel` | `cy` | Celtic | Welsh | | \[1\] Currently, only fully diacritized Arabic is supported. diff --git a/docs/mbrola.md b/docs/mbrola.md index 7f4ccfae..91b9aef9 100644 --- a/docs/mbrola.md +++ b/docs/mbrola.md @@ -4,7 +4,7 @@ - [Windows Installation](#windows-installation) - [Linux Installation](#linux-installation) - [Installation of standard packages](#installation-of-standard-packages) - - [Installation of latest MBROLA packages](#installation-of-latest-mbrola-packages) + - [Installation of MBROLA package from source](#installation-of-mbrola-package-from-source) - [Usage](#usage) - [Adding new MBROLA voice entry to eSpeak NG](#adding-new-mbrola-voice-entry-to-espeak-ng) - [1. Add MBROLA voice definition file](#1-add-mbrola-voice-definition-file) @@ -13,14 +13,13 @@ ---------- -The MBROLA project is a collection of diphone voices for speech -synthesis. They do not include any text-to-phoneme translation, so this -must be done by another program. The MBROLA voices are cost-free but are -not open source. Voice files are available at -[http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html](http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html). +The [MBROLA](https://github.com/numediart/MBROLA) is an open source speech engine +with collection of diphone voices for speech synthesis. Voices are cost-free for +non-commerical purposes, but are not open source. -eSpeak NG can be used as a front-end to MBROLA. It provides the -spelling-to-phoneme translation and intonation, which MBROLA then uses +MBROLA does not include any text-to-phoneme translation, so this +must be done by another program. eSpeak NG can be used as a front-end to MBROLA, +to provide spelling-to-phoneme translation and intonation, which MBROLA then uses to generate speech sound. ## Voice Names @@ -37,17 +36,13 @@ where `xxN` is the name of a MBROLA voice (e.g. `mb-en1` for the MBROLA `.../espeak-ng-data/voices/mb` (where `...` is usually `/usr/share`, but could be somewhere else). -The installation instructions below use the MBROLA voice `en1` as an -example. You can use other mbrola voices for which there is an -equivalent eSpeak NG voice in `espeak-ng-data/voices/mb`. - There are some additional eSpeak NG MBROLA voices, which speak English text using a MBROLA voice for a different language. These contain the name of the MBROLA voice with a suffix `-en`. For example, the voice `mb-de4-en` will speak English text with a German accent by using the MBROLA `de4` voice. -The following MBROLA voices are available. Not all are supported by eSpeak NG. +The following MBROLA voices are available in eSpeak NG. | MBROLA Voice | Language | Gender | eSpeak | Debian Package | |--------------|----------------------|--------|----------|----------------| @@ -127,8 +122,11 @@ The following MBROLA voices are available. Not all are supported by eSpeak NG. | `us3` | American English | male | `mb-us3` | `mbrola-us3` | | `vz1` | Venezuelan Spanish | male | `mb-vz1` | `mbrola-vz1` | -* If some MBROLA voice is not available as Debian package, you can download data files - from [here](https://github.com/mbrola/mbrola-voices). +eSpeak NG will look for mbrola voices firstly in `espeak-ng-data/mbrola` and then in `/usr/share/mbrola`. + +The installation instructions below use the MBROLA voice `en1` as an +example. You can use other mbrola voices for which there is an +equivalent eSpeak NG voice in `espeak-ng-data/voices/mb`. ## Windows Installation @@ -140,11 +138,10 @@ The SAPI5 version of eSpeak NG uses the `mbrola.dll`. 2. Install the PC/Windows version of MBROLA (`MbrolaTools35.exe`) from: [http://www.tcts.fpms.ac.be/synthesis/mbrola/bin/pcwin/MbrolaTools35.exe](http://www.tcts.fpms.ac.be/synthesis/mbrola/bin/pcwin/MbrolaTools35.exe). -3. Get the `en1` or other voice from: - [http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html](http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html). +3. Download the `en1` or other voice from: + [https://github.com/numediart/MBROLA-voices](https://github.com/numediart/MBROLA-voices) -4. Unpack the archive, and copy the `en1` data file (not the whole "en1" folder) into - `C:/Program Files/eSpeak/espeak-ng-data/mbrola`. +4. Save downloaded `en1` data file into `C:/Program Files/eSpeak/espeak-ng-data/mbrola`. 4. Use the voice `espeak-MB-EN1` from the list of SAPI5 voices. @@ -166,24 +163,37 @@ You can check other available voices searching with command: apt-cache search mbrola -### Installation of latest MBROLA packages +If some MBROLA voice is not available as Debian package, you can download data files +from [https://github.com/numediart/MBROLA-voices](https://github.com/numediart/MBROLA-voices) +and save them in `/usr/share/mbrola/xxN/xxN` file, where `xxN` is code and number of language file. -1. To install the latest MBROLA binary for Linux, download: - [http://www.tcts.fpms.ac.be/synthesis/mbrola/bin/pclinux/mbr301h.zip](http://www.tcts.fpms.ac.be/synthesis/mbrola/bin/pclinux/mbr301h.zip). +### Installation of MBROLA package from source -2. Unpack the archive, and copy and rename the file from: `mbrola-linux-i386` to `mbrola` somewhere in your executable path (eg. `/usr/bin/mbrola`). +1. Install necessary packages: +``` +sudo apt-get install git make gcc +``` -3. Get the `en1` or other voice from: - [http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html](http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html). +2. Clone MBROLA git repository: +``` +git clone https://github.com/numediart/MBROLA.git +cd MBROLA +``` -4. Unpack the archive, and copy the `en1` data file (not the whole "en1" folder) to `/usr/share/mbrola/en1` folder. +3. Compile MBROLA: +``` +make +``` -5. Remember to make `mbrola` file executable. +4. Install MBROLA: +``` +sudo cp Bin/mbrola /usr/bin/mbrola +``` -__Notes:__ +5. Download the `en1` or other voice from +[https://github.com/numediart/MBROLA-voices](https://github.com/numediart/MBROLA-voices) -* eSpeak NG will look for mbrola voices firstly in `espeak-ng-data/mbrola` and then in `/usr/share/mbrola`. -* You can download latest development versions of MBROLA binaries from [https://github.com/mbrola/mbrola-bin/](https://github.com/mbrola/mbrola-bin/) +6. Copy the `en1` data file to `/usr/share/mbrola/en1` folder. ## Usage diff --git a/espeak-ng-data/lang/aav/vi b/espeak-ng-data/lang/aav/vi index c988a8e7..7808128d 100644 --- a/espeak-ng-data/lang/aav/vi +++ b/espeak-ng-data/lang/aav/vi @@ -1,5 +1,8 @@ name Vietnamese (Northern) language vi -words 1 -pitch 100 180 +words 1 2 +pitch 95 175 + + +tone 100 225 800 100 2000 50 5400 75 8000 200 diff --git a/espeak-ng-data/lang/art/py b/espeak-ng-data/lang/art/py new file mode 100644 index 00000000..850a34e8 --- /dev/null +++ b/espeak-ng-data/lang/art/py @@ -0,0 +1,7 @@ +name Pyash +language py +maintainer Logan Streondj +status testing + +speed 80 // speed adjustment, percentage +stressRule 0 diff --git a/espeak-ng-data/lang/gmw/de b/espeak-ng-data/lang/gmw/de index 470e5afd..a43cc1a5 100644 --- a/espeak-ng-data/lang/gmw/de +++ b/espeak-ng-data/lang/gmw/de @@ -1,2 +1,3 @@ name German language de +tunes s4 c1 q4 e1 diff --git a/espeak-ng-data/lang/ira/fa-Latn b/espeak-ng-data/lang/ira/fa-Latn index 7a43725b..02c6da6e 100644 --- a/espeak-ng-data/lang/ira/fa-Latn +++ b/espeak-ng-data/lang/ira/fa-Latn @@ -1,6 +1,6 @@ name Persian (Pinglish) // Sometimes, Farsi speakers write Farsi words using English characters, particularly in Chat and SMS (texte messages).), called Pinglish -language fa-Latn +language fa-latn maintainer Shadyar Khodayari status mature dictrules 1 diff --git a/espeak-ng-data/lang/zle/ru-LV b/espeak-ng-data/lang/zle/ru-LV index ec8fa654..fc9541ba 100644 --- a/espeak-ng-data/lang/zle/ru-LV +++ b/espeak-ng-data/lang/zle/ru-LV @@ -1,5 +1,5 @@ name Russian (Latvia) -language ru-LV 2 +language ru-lv 2 maintainer Valdis Vitolins status testing diff --git a/espeak-ng-data/voices/!v/Nguyen b/espeak-ng-data/voices/!v/Nguyen new file mode 100644 index 00000000..50c72fc6 --- /dev/null +++ b/espeak-ng-data/voices/!v/Nguyen @@ -0,0 +1,16 @@ +language variant +name Nguyen + +pitch 95 175 + +formant 0 100 125 100 +formant 1 96 90 80 +formant 2 97 70 90 +formant 3 97 60 90 +formant 4 97 60 90 +formant 5 75 50 90 +formant 6 90 50 100 +formant 7 100 50 100 +formant 8 100 50 100 + +tone 100 200 600 150 800 100 2400 80 3600 95 5400 100 diff --git a/espeak-ng-data/voices/!v/m8 b/espeak-ng-data/voices/!v/m8 index 428d99b5..c03ca3eb 100644 --- a/espeak-ng-data/voices/!v/m8 +++ b/espeak-ng-data/voices/!v/m8 @@ -8,7 +8,7 @@ formant 1 96 90 80 formant 2 97 70 90 formant 3 97 60 90 formant 4 97 60 90 -formant 5 75 50 90 +formant 5 100 50 90 formant 6 90 50 100 formant 7 100 50 100 formant 8 100 50 100 diff --git a/phsource/n/nm b/phsource/n/nm index a66f7a6b..2a5b02b5 100644 Binary files a/phsource/n/nm and b/phsource/n/nm differ diff --git a/phsource/ph_german b/phsource/ph_german index 6fb8d681..48b88d1c 100644 --- a/phsource/ph_german +++ b/phsource/ph_german @@ -1,4 +1,4 @@ - + //========================================================= // German @@ -9,7 +9,7 @@ phoneme @ // Schwa vwl starttype #@ endtype #@ unstressed - length 120 + length 40 IF nextPh(r) THEN IF next2Ph(isVowel) THEN ELSE @@ -171,7 +171,7 @@ endphoneme phoneme OY vwl starttype #o endtype #i length 220 - FMT(vdiph/oi) + FMT(vwl_de/eu) endphoneme @@ -205,19 +205,19 @@ endphoneme phoneme y vwl starttype #u endtype #u - ipa ʏ - length 110 + ipa ? + length 100 IF nextPh(*) THEN - length 115 + length 110 ENDIF - FMT(vowel/yy_4) + FMT(vowel/u#_3) endphoneme phoneme Y: vwl starttype #@ endtype #@ - length 180 - FMT(vowel/y#) + length 220 + FMT(vwl_de/y#) endphoneme @@ -344,7 +344,7 @@ phoneme r // note, following consonant must be 'ustop/t_' not 'ustop/tr' etc. ELSEIF prevPhW(d) OR prevPhW(b) OR prevPhW(g) OR prevPhW(k) OR prevPhW(p) THEN PauseBefore 15 ELSE - InsertPhoneme(@-) + FMT(r3/r_, 40) addWav(r3/rx, 150) ENDIF ENDIF ENDIF @@ -361,7 +361,7 @@ endphoneme phoneme iR // TEST "vier" = [f'iR] not successful vwl starttype #i endtype #@ - ipa iɐ + ipa i? flag1 length 240 FMT(vdiph2/i@_3) @@ -370,7 +370,7 @@ endphoneme phoneme UR vwl starttype #u endtype #@ - ipa ʊɐ + ipa ?? flag1 length 180 FMT(vwl_de/uu_@) @@ -461,12 +461,12 @@ phoneme k WAV(ustop/k, 70) ELIF nextPh(R) OR nextPh(R2) THEN WAV(ustop/k_) - ELIF nextPh(i:) OR nextPh(;) THEN + ELIF nextPh(i:) OR nextPh(j) OR nextPh(;) THEN WAV(ustop/ki) ELIF nextPh(l) THEN WAV(ustop/kl) ELIF nextPh(@-) THEN - WAV(ustop/k_unasp) + WAV(ustop/k, 70) ENDIF WAV(ustop/k) endphoneme diff --git a/phsource/ph_pyash b/phsource/ph_pyash new file mode 100644 index 00000000..95f81e45 --- /dev/null +++ b/phsource/ph_pyash @@ -0,0 +1,9 @@ +// Phonemes for Pyash (an artificial constructed language) +// Inherits phonemes from Esperanto + +phoneme e + vwl starttype #e endtype #e + length 170 + FMT(vowel/e_mid2) +endphoneme + diff --git a/phsource/ph_vietnam b/phsource/ph_vietnam index 0fcfd755..d42ea4b1 100644 --- a/phsource/ph_vietnam +++ b/phsource/ph_vietnam @@ -6,7 +6,7 @@ phoneme 1 // ngang tone: level stress - Tone(30, 28, envelope/p_level, NULL) // 28 29 + Tone(27, 25, envelope/p_level, NULL) // 28 29 endphoneme @@ -18,7 +18,7 @@ endphoneme phoneme 3 // sắc Tone(rising stress - Tone(30, 55, envelope/p_rise, NULL) // 30 60 + Tone(20, 50, envelope/p_rise, NULL) // 30 60 endphoneme @@ -54,86 +54,188 @@ endphoneme phoneme a vwl starttype #@ endtype #@ - IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + IF nextPhW(p) THEN + length 78 + ELIF nextPhW(t[) THEN + length 84 + ELIF nextPhW(c) THEN + length 82 + ELIF nextPhW(m) THEN + length 90 + ELIF nextPhW(n) THEN + length 100 + ELIF nextPhW(N) THEN + length 90 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN length 240 - ELSE - length 180 - ENDIF - IF nextPh(N) OR nextPh(c) THEN - FMT(vnasal/a_n) - ELSE - //FMT(vietnam/a) //a_4) - FMT(vietnam/a_x) - ENDIF + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN + length 140 + ELSE + length 100 + ENDIF + + FMT(vietnam/a_2) //a_4) + endphoneme phoneme a: vwl starttype #a endtype #a - IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd)THEN + IF nextPhW(p) THEN + length 142 + ELIF nextPhW(t[) THEN + length 126 + ELIF nextPhW(c) THEN + length 136 + ELIF nextPhW(m) THEN + length 155 + ELIF nextPhW(n) THEN + length 185 + ELIF nextPhW(N) THEN + length 200 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + length 300 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN length 240 - ELIF nextPh(n^) OR nextPh(c) THEN - length 100 - ELIF nextPh(N) THEN - length 200 + ELIF thisPh(isWordStart) AND thisPh(isWordEnd) THEN + length 333 ELSE - length 180 //200 + length 180 ENDIF - // FMT(vowel/a_8) - FMT(vietnam/a_2) + //FMT(vowel/a_8) + FMT(vietnam/aa) endphoneme phoneme E vwl starttype #e endtype #e - IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + + IF nextPhW(p) THEN + length 143 + ELIF nextPhW(t[) THEN + length 107 + ELIF nextPhW(c) THEN + length 141 + ELIF nextPhW(m) THEN + length 128 + ELIF nextPhW(n) THEN + length 160 + ELIF nextPhW(N) THEN + length 187 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + length 300 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN length 240 - ELSE + ELIF thisPh(isWordStart) AND thisPh(isWordEnd) THEN + length 352 + ELSE length 180 - ENDIF - FMT(vowel/e_e) //ee_3) + ENDIF + //FMT(vowel/e_e) //ee_3) + FMT(vietnam/e_e_2) endphoneme phoneme e vwl starttype #e endtype #e - IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + IF nextPhW(p) THEN + length 114 + ELIF nextPhW(t[) THEN + length 126 + ELIF nextPhW(c) THEN + length 140 + ELIF nextPhW(n^) THEN + length 120 + ELIF nextPhW(m) THEN + length 148 + ELIF nextPhW(n) THEN + length 163 + ELIF nextPhW(N) THEN + length 115 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + length 300 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN length 240 - ELSE + ELIF thisPh(isWordStart) AND thisPh(isWordEnd) THEN + length 324 + ELSE length 180 - ENDIF -// FMT(vowel/e) - FMT(vietnam/e) + ENDIF + IF nextPh(n^) THEN + FMT(vowel/e) + ELSE + FMT(vietnam/e, 150) + ENDIF endphoneme +phoneme e- + vwl starttype #e endtype #a + length 140 + FMT(vietnam/e_short_1) + //FMT(vdiph/aai_3) +endphoneme + phoneme i vwl starttype #i endtype #i IfNextVowelAppend(;) IF prevPhW(w) THEN VowelStart(w/wi) ENDIF - IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + IF nextPhW(p) THEN + length 131 + ELIF nextPhW(t[) THEN + length 113 + ELIF nextPhW(c) OR nextPhW(n^) THEN + length 72 + ELIF nextPhW(m) THEN + length 120 + ELIF nextPhW(n) THEN + length 128 + ELIF nextPhW(N) THEN + length 97 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + length 310 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN length 240 + ELIF thisPh(isWordStart) AND thisPh(isWordEnd) THEN + length 363 + ELSE + length 180 ENDIF IF nextPh(n^) OR nextPh(c) THEN - length 100 - FMT(vnasal/ii_n) + //FMT(vnasal/ii_n) + FMT(vietnam/i) ELSE - length 180 -FMT(vowel/i_4) + //FMT(vowel/i_4) + FMT(vietnam/i_2, 100) ENDIF endphoneme phoneme O vwl starttype #o endtype #o - IF nextPh(kh) OR nextPh(N) THEN + IF nextPhW(p) THEN + length 129 + ELIF nextPhW(t[) THEN + length 125 + ELIF nextPhW(c) THEN length 80 - ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + ELIF nextPhW(m) THEN + length 133 + ELIF nextPhW(n) THEN + length 158 + ELIF nextPhW(N) THEN + length 102 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + length 300 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN length 240 - ELSE + ELIF thisPh(isWordStart) AND thisPh(isWordEnd) THEN + length 331 + ELSE length 180 - ENDIF - FMT(vdiph2/o_oo) //vowel/oo) + ENDIF + //FMT(vdiph2/o_oo) //vowel/oo) + FMT(vietnam/oo) endphoneme phoneme O+ @@ -150,65 +252,142 @@ endphoneme phoneme o vwl starttype #o endtype #o - IF nextPh(kh) OR nextPh(N) THEN - length 110 - ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + IF nextPhW(p) THEN + length 140 + ELIF nextPhW(t[) THEN + length 113 + ELIF nextPhW(c) THEN + length 88 + ELIF nextPhW(m) THEN + length 134 + ELIF nextPhW(n) THEN + length 168 + ELIF nextPhW(N) THEN + length 99 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + length 310 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN length 240 - ELSE + ELIF thisPh(isWordStart) AND thisPh(isWordEnd) THEN + length 363 + ELSE length 180 - ENDIF - FMT(vowel/o) // o_2) + ENDIF + //FMT(vowel/o) // o_2) + FMT(vietnam/o_2) endphoneme phoneme u vwl starttype #u endtype #u - IF nextPh(kh) OR nextPh(N) THEN // hear as ung sound - length 120 - ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + + IF nextPhW(p) THEN + length 110 + ELIF nextPhW(t[) THEN + length 94 + ELIF nextPhW(c) THEN + length 83 + ELIF nextPhW(m) THEN + length 141 + ELIF nextPhW(n) THEN + length 177 + ELIF nextPhW(N) THEN + length 80 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + length 300 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN length 240 - ELSE + ELIF thisPh(isWordStart) AND thisPh(isWordEnd) THEN + length 333 + ELSE length 180 - ENDIF - FMT(vnasal/u_n,60) //vowel/u_5) + ENDIF + //FMT(vnasal/u_n) //vowel/u_5) + FMT(vietnam/u) endphoneme phoneme y vwl starttype #u endtype #u - IF nextPh(kh) OR nextPh(N) THEN - length 120 - ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + IF nextPhW(p) THEN + length 102 + ELIF nextPhW(t[) THEN + length 76 + ELIF nextPhW(c) THEN + length 90 + ELIF nextPhW(m) THEN + length 143 + ELIF nextPhW(n) THEN + length 136 + ELIF nextPhW(N) THEN + length 101 + ELIF nextPhW(w) OR nextPhW(j) THEN + length 110 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + length 300 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN length 240 - ELSE + ELIF thisPh(isWordStart) AND thisPh(isWordEnd) THEN + length 328 + ELSE length 180 - ENDIF - FMT(vowel/u#_5) + ENDIF + //FMT(vowel/u#_5) + FMT(vietnam/y_2, 60) endphoneme phoneme @ vwl starttype #@ endtype #a - IF nextPh(kh) OR nextPh(N) OR nextPh(n^) OR nextPh(c) THEN - length 120 - ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + IF nextPhW(p) THEN + length 123 + ELIF nextPhW(t[) THEN + length 123 + ELIF nextPhW(c) THEN + length 139 + ELIF nextPhW(m) THEN + length 127 + ELIF nextPhW(n) THEN + length 160 + ELIF nextPhW(N) THEN + length 156 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN length 240 - ELSE + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN + length 240 + ELSE length 180 - ENDIF + ENDIF // FMT(vowel/V) //vowel/@_2) - FMT(vietnam/V) + FMT(vietnam/V_2) endphoneme phoneme @: vwl starttype #@ endtype #@ - IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + IF nextPhW(p) THEN + length 123 + ELIF nextPhW(t[) THEN + length 123 + ELIF nextPhW(c) THEN + length 139 + ELIF nextPhW(m) THEN + length 127 + ELIF nextPhW(n) THEN + length 160 + ELIF nextPhW(N) THEN + length 156 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + length 300 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN length 240 - ELSE + ELIF thisPh(isWordStart) AND thisPh(isWordEnd) THEN + length 333 + ELSE length 180 - ENDIF - FMT(vowel/@_2) + ENDIF + //FMT(vowel/@_2) + FMT(vietnam/@_2) endphoneme @@ -386,34 +565,73 @@ endphoneme phoneme y@ vwl starttype #i endtype #@ - IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + IF nextPhW(p) THEN + length 123 + ELIF nextPhW(t[) THEN + length 123 + ELIF nextPhW(c) THEN + length 139 + ELIF nextPhW(m) THEN + length 127 + ELIF nextPhW(n) THEN + length 180 + ELIF nextPhW(N) THEN + length 156 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN length 240 - ELSE + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN + length 240 + ELSE length 200 - ENDIF - FMT(vdiph2/y-y#) + ENDIF + //FMT(vdiph2/y-y#) + FMT(vietnam/y@) endphoneme phoneme u@ vwl starttype #u endtype #@ - IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + IF nextPhW(p) THEN + length 123 + ELIF nextPhW(t[) THEN + length 123 + ELIF nextPhW(c) THEN + length 139 + ELIF nextPhW(m) THEN + length 127 + ELIF nextPhW(n) THEN + length 160 + ELIF nextPhW(N) THEN + length 156 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + length 300 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN length 240 - ELSE - length 200 - ENDIF - FMT(vdiph2/uu@) + ELIF thisPh(isWordStart) AND thisPh(isWordEnd) THEN + length 333 + ELSE + length 240 + ENDIF + //FMT(vdiph2/uu@)- + FMT(vietnam/u@) endphoneme // Addition Dipthongs phoneme o# // ông vwl starttype #o endtype #o - IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN - length 240 + IF nextPhW(k) THEN + length 120 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + length 360 + ELIF nextPhW(N) THEN + length 99 + ELIF nextPhW(k) THEN + length 88 ELSE length 200 ENDIF - FMT(vnasal/a#u_n) + //FMT(vnasal/a#u_n) + FMT(vietnam/o#) endphoneme phoneme O# // ong @@ -422,10 +640,13 @@ phoneme O# // ong length 240 ELIF nextPh(k) THEN length 140 + ELIF nextPh(N) THEN + length 102 ELSE length 200 ENDIF - FMT(vnasal/&u_n) + //FMT(vnasal/&u_n) + FMT(vietnam/O_short_2) endphoneme @@ -451,12 +672,32 @@ endphoneme phoneme iE // iê : viết, giệc vwl starttype #i endtype #e - IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + IF nextPhW(p) THEN + length 114 + ELIF nextPhW(t[) THEN + length 126 + ELIF nextPhW(c) THEN + length 140 + ELIF nextPhW(n^) THEN + length 120 + ELIF nextPhW(m) THEN + length 148 + ELIF nextPhW(n) THEN + length 163 + ELIF nextPhW(N) THEN + length 115 + ELIF nextPhW(w) THEN + length 100 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN + length 300 + ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordStart) THEN length 240 - ELSE - length 200 - ENDIF - FMT(vietnam/ie_2) + ELIF thisPh(isWordStart) AND thisPh(isWordEnd) THEN + length 324 + ELSE + length 180 + ENDIF + FMT(vietnam/ie) endphoneme phoneme Oi // oai sound @@ -510,21 +751,36 @@ phoneme kh endphoneme phoneme k - vls vel frc + vls vel stp lengthmod 3 + IF nextPhW(#u) THEN + Vowelin f1=1 f2=600 -200 -400 f3=-200 80 amp=200 len=30 rms=200 + WAV(vietnam/c_2, 255) + ELSE Vowelin f1=0 f2=2300 200 400 f3=200 80 len=30 + WAV(vietnam/c) + ENDIF Vowelout f1=0 f2=2300 300 400 f3=200 80 rms=20 - WAV(ustop/c) + //WAV(ustop/c) + endphoneme phoneme N // si**ng** vcd lbv nas + IF prevPhW(u@) THEN + // do nothing + ELSE Vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk - lengthmod 12 // longer than 'n' - IF prevPhW(isVowel) AND prev2PhW(isVowel) THEN - length 160 ENDIF - FMT(n/nm) + lengthmod 12 // longer than 'n' + IF thisPh(isWordEnd) THEN + length 163 + ENDIF + IF thisPh(isWordEnd) THEN + FMT(n/nm, 50) + ELSE + FMT(nn/_nn) + ENDIF endphoneme phoneme l @@ -563,17 +819,18 @@ phoneme d_ vcd alv stp // lengthmod 5 ipa ɗ - length 50 - Vowelin f1=1 f2=1700 -300 300 f3=-100 80 len=15 - Vowelout f1=2 f2=1700 -300 300 f3=-100 80 brk len=30 -WAV(vietnam/dd) + length 70 + Vowelin f1=1 f2=1500 -300 300 f3=-100 80 len=15 + Vowelout f1=2 f2=1700 -300 300 f3=-100 80 brk len=30 + WAV(vietnam/dda_2, 200) + endphoneme phoneme c vls pal stp pzd //voicingswitch J lengthmod 2 - length 2 + length 50 Vowelin f1=0 f2=2700 400 600 f3=300 80 len=15 brk Vowelout f1=1 f2=2700 400 600 f3=200 70 len=15 colr=1 @@ -585,24 +842,152 @@ endphoneme phoneme p vls blb stp lengthmod 2 + length 15 Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 - WAV(ustop/p_unasp_,10) - + IF thisPh(isWordEnd) THEN + WAV(ustop/p_unasp_, 10) + ELSE + WAV(ustop/p) + ENDIF endphoneme phoneme t[ // dental variant of /t/ - vls dnt stp - voicingswitch d[ - lengthmod 2 - length 5 - Vowelin f1=1 f2=1500 -250 250 f3=-100 80 amp=16 len=15 - Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 len=15 + IF thisPh(isWordEnd) THEN + vls alv stp + voicingswitch d + lengthmod 2 + length 15 + IF prevPhW(#@) THEN + Vowelout f1=0 f2=1200 -50 50 f3=50 80 rms=20 len=15 + ELIF prevPhW(y@) THEN + Vowelout f1=2 f2=1200 -100 150 f3=150 80 rms=20 len=15 + ELIF prevPhW(#i) THEN + Vowelout f1=0 f2=2000 -300 250 f3=-50 80 rms=20 len=15 + ELIF prevPhW(E) THEN + Vowelout f1=0 f2=1900 -200 200 f3=-100 80 rms=20 len=15 + ELIF prevPhW(e) OR prevPhW(iE) THEN + Vowelout f1=2 f2=1800 -400 250 f3=-200 80 rms=20 len=15 + ELIF prevPhW(u) THEN + Vowelout f1=2 f2=1000 -1000 250 f3=-400 80 rms=20 len=15 + ELIF prevPhW(y) THEN + Vowelout f1=1 f2=1500 -300 250 f3=-400 80 rms=20 len=15 + ELIF prevPhW(#a) THEN + Vowelout f1=2 f2=1500 -300 250 f3=-500 80 rms=20 len=15 + ELIF prevPhW(o) THEN + Vowelout f1=2 f2=1000 -100 250 f3=-200 80 rms=20 len=15 + ELIF prevPhW(O) THEN + Vowelout f1=1 f2=1000 -300 200 f3=-100 80 rms=20 len=15 + ELSE + Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 len=15 + ENDIF + WAV(ustop/t_, 25) + ELSE + vls dnt stp + voicingswitch d[ + lengthmod 2 + IF nextPhW(#u) THEN + length 30 + ELSE + length 15 + ENDIF + Vowelin f1=1 f2=1500 -250 250 f3=-100 80 amp=16 len=35 + Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 len=15 - IF nextPh(isPause2) THEN - WAV(ustop/t_unasp2, 5) + IF nextPh(isPause2) THEN + WAV(ustop/t_unasp2, 5) + ENDIF + WAV(ustop/t_hi, 70) ENDIF - WAV(ustop/t_hi, 70) endphoneme +phoneme w + liquid + + starttype #u + + IF nextPh(isVowel) THEN + length 20 + NextVowelStarts + VowelStart(w/w@) + VowelStart(w/wa) + VowelStart(w/we) + VowelStart(w/wi) + VowelStart(w/wo) + VowelStart(w/wu) + EndSwitch + + VowelEnding(w/xw, -30) + IF nextPh(isVowel) AND prevPhW(t[) THEN + FMT(vnasal/u_n, 60) addWav(vietnam/w, 50) + ELIF prevPhW(isNasal) THEN + FMT(w/w) + ELSEIF prevPhW(h) THEN + // none, [hw] + ELSE + //FMT(w/_w) addWav(vietnam/w) + FMT(vietnam/_w) + ENDIF + ELSE + // no vowel follows + length 80 + Vowelout len=20 rms=20 + + //FMT(w/w_) + FMT(vietnam/w_, 150) + ENDIF +endphoneme + +phoneme n^ // (a)nh + vcd pal nas pzd + ipa ɲ + Vowelout f1=3 f2=2500 300 500 f3=100 80 len=45 brk rate + lengthmod 4 + + IF KlattSynth THEN + VowelStart(klatt/n^@) + FMT(klatt/n^) + ENDIF + + NextVowelStarts + VowelStart(n^/n^@) + VowelStart(n^/n^a) + VowelStart(n^/n^e) + VowelStart(n^/n^i) + VowelStart(n^/n^o) + VowelStart(n^/n^u) + EndSwitch + + IF thisPh(isWordEnd) THEN + IF nextPhW(n^) THEN + length 75 + ELIF prevPhW(n^) THEN + length 100 + ENDIF + FMT(vietnam/n^_) + ELSE + FMT(n^/_n^) + ENDIF +endphoneme + +phoneme h + vls glt frc + lengthmod 3 + ipa h + + IF nextPh(#@) THEN + WAV(h/h@) + ELIF nextPh(#a) THEN + WAV(h/ha) + ELIF nextPh(#e) THEN + WAV(h/he) + ELIF nextPh(#i) THEN + WAV(vietnam/hi) + ELIF nextPh(#o) THEN + WAV(h/ho) + ELIF nextPh(#u) THEN + WAV(vietnam/hu, 25) + ENDIF + WAV(h/h_, 70) // no vowel following +endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index 942e861c..53854062 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1722,6 +1722,9 @@ include ph_interlingua phonemetable jbo eo include ph_lojban +phonemetable py eo +include ph_pyash + phonemetable nci base2 include ph_nahuatl diff --git a/phsource/vietnam/@_2 b/phsource/vietnam/@_2 new file mode 100644 index 00000000..eb43e460 Binary files /dev/null and b/phsource/vietnam/@_2 differ diff --git a/phsource/vietnam/O_short b/phsource/vietnam/O_short new file mode 100644 index 00000000..30a9c337 Binary files /dev/null and b/phsource/vietnam/O_short differ diff --git a/phsource/vietnam/O_short_2 b/phsource/vietnam/O_short_2 new file mode 100644 index 00000000..1e1158df Binary files /dev/null and b/phsource/vietnam/O_short_2 differ diff --git a/phsource/vietnam/V_2 b/phsource/vietnam/V_2 new file mode 100644 index 00000000..d63f8fc9 Binary files /dev/null and b/phsource/vietnam/V_2 differ diff --git a/phsource/vietnam/_w b/phsource/vietnam/_w new file mode 100644 index 00000000..0f5ff6fd Binary files /dev/null and b/phsource/vietnam/_w differ diff --git a/phsource/vietnam/a_2 b/phsource/vietnam/a_2 index 1e68a9db..894e9006 100644 Binary files a/phsource/vietnam/a_2 and b/phsource/vietnam/a_2 differ diff --git a/phsource/vietnam/aa b/phsource/vietnam/aa new file mode 100644 index 00000000..dea55b25 Binary files /dev/null and b/phsource/vietnam/aa differ diff --git a/phsource/vietnam/c.wav b/phsource/vietnam/c.wav new file mode 100644 index 00000000..7fde6b32 Binary files /dev/null and b/phsource/vietnam/c.wav differ diff --git a/phsource/vietnam/c_2.wav b/phsource/vietnam/c_2.wav new file mode 100644 index 00000000..c4adb96a Binary files /dev/null and b/phsource/vietnam/c_2.wav differ diff --git a/phsource/vietnam/dd_2.wav b/phsource/vietnam/dd_2.wav new file mode 100644 index 00000000..5516619f Binary files /dev/null and b/phsource/vietnam/dd_2.wav differ diff --git a/phsource/vietnam/dda.wav b/phsource/vietnam/dda.wav new file mode 100644 index 00000000..218f3bf2 Binary files /dev/null and b/phsource/vietnam/dda.wav differ diff --git a/phsource/vietnam/dda_2.wav b/phsource/vietnam/dda_2.wav new file mode 100644 index 00000000..9532aa8b Binary files /dev/null and b/phsource/vietnam/dda_2.wav differ diff --git a/phsource/vietnam/e b/phsource/vietnam/e index 585266a7..82c28e69 100644 Binary files a/phsource/vietnam/e and b/phsource/vietnam/e differ diff --git a/phsource/vietnam/e_2 b/phsource/vietnam/e_2 new file mode 100644 index 00000000..1f496322 Binary files /dev/null and b/phsource/vietnam/e_2 differ diff --git a/phsource/vietnam/e_e b/phsource/vietnam/e_e new file mode 100644 index 00000000..4b5efa0c Binary files /dev/null and b/phsource/vietnam/e_e differ diff --git a/phsource/vietnam/e_e_2 b/phsource/vietnam/e_e_2 new file mode 100644 index 00000000..ddd014b8 Binary files /dev/null and b/phsource/vietnam/e_e_2 differ diff --git a/phsource/vietnam/e_short_1 b/phsource/vietnam/e_short_1 new file mode 100644 index 00000000..e7115445 Binary files /dev/null and b/phsource/vietnam/e_short_1 differ diff --git a/phsource/vietnam/e_short_2 b/phsource/vietnam/e_short_2 new file mode 100644 index 00000000..b47239aa Binary files /dev/null and b/phsource/vietnam/e_short_2 differ diff --git a/phsource/vietnam/hi.wav b/phsource/vietnam/hi.wav new file mode 100644 index 00000000..c2b51e8e Binary files /dev/null and b/phsource/vietnam/hi.wav differ diff --git a/phsource/vietnam/hu.wav b/phsource/vietnam/hu.wav new file mode 100644 index 00000000..c83eaf7d Binary files /dev/null and b/phsource/vietnam/hu.wav differ diff --git a/phsource/vietnam/i b/phsource/vietnam/i new file mode 100644 index 00000000..aed36c38 Binary files /dev/null and b/phsource/vietnam/i differ diff --git a/phsource/vietnam/i_2 b/phsource/vietnam/i_2 new file mode 100644 index 00000000..2557b103 Binary files /dev/null and b/phsource/vietnam/i_2 differ diff --git a/phsource/vietnam/ie b/phsource/vietnam/ie new file mode 100644 index 00000000..42ca144f Binary files /dev/null and b/phsource/vietnam/ie differ diff --git a/phsource/vietnam/n^_ b/phsource/vietnam/n^_ new file mode 100644 index 00000000..1ec84c1f Binary files /dev/null and b/phsource/vietnam/n^_ differ diff --git a/phsource/vietnam/o# b/phsource/vietnam/o# new file mode 100644 index 00000000..cd11f701 Binary files /dev/null and b/phsource/vietnam/o# differ diff --git a/phsource/vietnam/o_2 b/phsource/vietnam/o_2 new file mode 100644 index 00000000..1cfb4587 Binary files /dev/null and b/phsource/vietnam/o_2 differ diff --git a/phsource/vietnam/oo b/phsource/vietnam/oo new file mode 100644 index 00000000..88093a70 Binary files /dev/null and b/phsource/vietnam/oo differ diff --git a/phsource/vietnam/u b/phsource/vietnam/u new file mode 100644 index 00000000..809e74e1 Binary files /dev/null and b/phsource/vietnam/u differ diff --git a/phsource/vietnam/u@ b/phsource/vietnam/u@ new file mode 100644 index 00000000..48321cbb Binary files /dev/null and b/phsource/vietnam/u@ differ diff --git a/phsource/vietnam/w.wav b/phsource/vietnam/w.wav new file mode 100644 index 00000000..fadea96b Binary files /dev/null and b/phsource/vietnam/w.wav differ diff --git a/phsource/vietnam/w_ b/phsource/vietnam/w_ new file mode 100644 index 00000000..810027e3 Binary files /dev/null and b/phsource/vietnam/w_ differ diff --git a/phsource/vietnam/y b/phsource/vietnam/y new file mode 100644 index 00000000..b67cd6b4 Binary files /dev/null and b/phsource/vietnam/y differ diff --git a/phsource/vietnam/y@ b/phsource/vietnam/y@ new file mode 100644 index 00000000..c30e1780 Binary files /dev/null and b/phsource/vietnam/y@ differ diff --git a/phsource/vietnam/y_2 b/phsource/vietnam/y_2 new file mode 100644 index 00000000..4831e441 Binary files /dev/null and b/phsource/vietnam/y_2 differ diff --git a/phsource/vwl_de/ue_short b/phsource/vwl_de/ue_short index 80d4a50b..03eccd0a 100644 Binary files a/phsource/vwl_de/ue_short and b/phsource/vwl_de/ue_short differ diff --git a/phsource/vwl_de/y# b/phsource/vwl_de/y# index 32c05397..0dfa3bbf 100644 Binary files a/phsource/vwl_de/y# and b/phsource/vwl_de/y# differ diff --git a/src/espeak-ng.c b/src/espeak-ng.c index 812397fe..10b8a887 100644 --- a/src/espeak-ng.c +++ b/src/espeak-ng.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -113,6 +114,7 @@ static const char *help_text = "--voices=\n" "\t List the available voices for the specified language.\n" "\t If is omitted, then list all voices.\n" + "--load Load voice from a file in current directory by name.\n" "-h, --help Show this help.\n"; int samplerate; @@ -321,6 +323,7 @@ int main(int argc, char **argv) { "compile-mbrola", optional_argument, 0, 0x10e }, { "compile-intonations", no_argument, 0, 0x10f }, { "compile-phonemes", optional_argument, 0, 0x110 }, + { "load", no_argument, 0, 0x111 }, { 0, 0, 0, 0 } }; @@ -336,6 +339,7 @@ int main(int argc, char **argv) int value; int flag_stdin = 0; int flag_compile = 0; + int flag_load = 0; int filesize = 0; int synth_flags = espeakCHARS_AUTO | espeakPHONEMES | espeakENDPAUSE; @@ -349,7 +353,7 @@ int main(int argc, char **argv) int phoneme_options = 0; int option_linelength = 0; int option_waveout = 0; - + espeak_VOICE voice_select; char filename[200]; char voicename[40]; @@ -562,6 +566,9 @@ int main(int argc, char **argv) } return EXIT_SUCCESS; } + case 0x111: // --load + flag_load = 1; + break; default: exit(0); } @@ -605,7 +612,10 @@ int main(int argc, char **argv) if (voicename[0] == 0) strcpy(voicename, ESPEAKNG_DEFAULT_VOICE); - result = espeak_ng_SetVoiceByName(voicename); + if(flag_load) + result = espeak_ng_SetVoiceByFile(voicename); + else + result = espeak_ng_SetVoiceByName(voicename); if (result != ENS_OK) { memset(&voice_select, 0, sizeof(voice_select)); voice_select.languages = voicename; diff --git a/src/include/espeak-ng/espeak_ng.h b/src/include/espeak-ng/espeak_ng.h index 36d2682b..b9804fce 100644 --- a/src/include/espeak-ng/espeak_ng.h +++ b/src/include/espeak-ng/espeak_ng.h @@ -119,6 +119,9 @@ espeak_ng_SetPunctuationList(const wchar_t *punctlist); ESPEAK_NG_API espeak_ng_STATUS espeak_ng_SetVoiceByName(const char *name); +ESPEAK_NG_API espeak_ng_STATUS +espeak_ng_SetVoiceByFile(const char *filename); + ESPEAK_NG_API espeak_ng_STATUS espeak_ng_SetVoiceByProperties(espeak_VOICE *voice_selector); diff --git a/src/include/espeak-ng/speak_lib.h b/src/include/espeak-ng/speak_lib.h index 5cce6164..cc1e35e7 100644 --- a/src/include/espeak-ng/speak_lib.h +++ b/src/include/espeak-ng/speak_lib.h @@ -606,6 +606,19 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec); are listed, and they are listed in preference order. */ +#ifdef __cplusplus +extern "C" +#endif +ESPEAK_API espeak_ERROR espeak_SetVoiceByFile(const char *filename); +/* Loads a voice given the file path. Language is not considered. + "filename" is a UTF8 string. + + Return: EE_OK: operation achieved + EE_BUFFER_FULL: the command can not be buffered; + you may try after a while to call the function again. + EE_INTERNAL_ERROR. +*/ + #ifdef __cplusplus extern "C" #endif diff --git a/src/libespeak-ng/espeak_api.c b/src/libespeak-ng/espeak_api.c index 0a5f6fd7..73d9417b 100644 --- a/src/libespeak-ng/espeak_api.c +++ b/src/libespeak-ng/espeak_api.c @@ -128,6 +128,11 @@ ESPEAK_API espeak_ERROR espeak_SetVoiceByName(const char *name) return status_to_espeak_error(espeak_ng_SetVoiceByName(name)); } +ESPEAK_API espeak_ERROR espeak_SetVoiceByFile(const char *filename) +{ + return status_to_espeak_error(espeak_ng_SetVoiceByFile(filename)); +} + ESPEAK_API espeak_ERROR espeak_SetVoiceByProperties(espeak_VOICE *voice_selector) { return status_to_espeak_error(espeak_ng_SetVoiceByProperties(voice_selector)); diff --git a/src/libespeak-ng/voices.c b/src/libespeak-ng/voices.c index 73a48fc4..3eca48f7 100644 --- a/src/libespeak-ng/voices.c +++ b/src/libespeak-ng/voices.c @@ -1466,6 +1466,45 @@ static void GetVoices(const char *path, int len_path_voices, int is_language_fil #pragma GCC visibility push(default) + +ESPEAK_NG_API espeak_ng_STATUS espeak_ng_SetVoiceByFile(const char *filename) +{ + espeak_VOICE *v; + int ix; + espeak_VOICE voice_selector; + char *variant_name; + static char buf[60]; + + strncpy0(buf, filename, sizeof(buf)); + + variant_name = ExtractVoiceVariantName(buf, 0, 1); + + for (ix = 0;; ix++) { + // convert voice name to lower case (ascii) + if ((buf[ix] = tolower(buf[ix])) == 0) + break; + } + + memset(&voice_selector, 0, sizeof(voice_selector)); + voice_selector.name = (char *)filename; // include variant name in voice stack ?? + + // first check for a voice with this filename + // This may avoid the need to call espeak_ListVoices(). + + if (LoadVoice(buf, 0x10) != NULL) { + if (variant_name[0] != 0) + LoadVoice(variant_name, 2); + + DoVoiceChange(voice); + voice_selector.languages = voice->language_name; + SetVoiceStack(&voice_selector, variant_name); + return ENS_OK; + } + + return ENS_VOICE_NOT_FOUND; +} + + ESPEAK_NG_API espeak_ng_STATUS espeak_ng_SetVoiceByName(const char *name) { espeak_VOICE *v; diff --git a/src/windows/Debug/output_@.wav b/src/windows/Debug/output_@.wav new file mode 100644 index 00000000..75ca577d Binary files /dev/null and b/src/windows/Debug/output_@.wav differ diff --git a/src/windows/Debug/output_e.wav b/src/windows/Debug/output_e.wav new file mode 100644 index 00000000..50dfdba5 Binary files /dev/null and b/src/windows/Debug/output_e.wav differ diff --git a/src/windows/Debug/output_i.wav b/src/windows/Debug/output_i.wav new file mode 100644 index 00000000..7445bd21 Binary files /dev/null and b/src/windows/Debug/output_i.wav differ diff --git a/tests/language-phonemes.test b/tests/language-phonemes.test index 43f6f80e..9269b6a1 100755 --- a/tests/language-phonemes.test +++ b/tests/language-phonemes.test @@ -48,7 +48,7 @@ test_lang cmn e7831fc783f79f1505e90d81d193dc591cb6f54e "na Na la ja pa pha fa ta test_lang cs 73d5bdeebdab81c629d34f76c87930bb6a188c50 "ma na n^a pa ta ca ka ba da Ja ga tsa tSa dza dZa fa sa Sa xa va za Za ha r-a Ra R^a R^/a la ja _:_ mi mi: me me: ma ma: mo mo: mu mu: maU meU moU" test_lang cy 5c5c7ab1c1b531dcacbbe072d5ee9cef3467d945 "ma na Na pa ta ka ba da ga tSa dZa fa Ta sa Sa xa ha ca Da za ra Ca la l/2a ja wa _:_ ma mE mI mY mO mU mV mi: my: mu: me: mo: mA: mAY maI maY maU m@I m@Y meU mIu mYu mOI mOY muI muY" test_lang da c55842af4f63fd67e6e48b97903b77223b6a4d77 "ma na Na pa ta ka ba da ga fa sa ha S;a tS;a va Da ja ra Ra _:_ m@ m@- m3 m3- mi m?i mI me m?e mE m?E m& m?& m&# m?&# mA m?A mu m?u mo m?o mO m?O mV m?V m0 m?0 my m?y mY mW m?W mW# m?W# maI" -test_lang de ec91c396bf20b12b96bb18b4d631188dcf2a480e "ma na Na pa ta ka ?a ba da ga pFa tsa tSa dZa sa Sa za Za fa Ta Ca xa ha ca Da ja la ra g#a l/a l2a _:_ m@ m3 ma mE mE2 mI mO mU mA mi2 my mW mI: mA: mi: mu: mE: me: mo: my: mY: maU maI mEI mOY moU mA~ miR mUR" +test_lang de f250cd80d6ddb782efcd3df9541b8b588e58e3d8 "ma na Na pa ta ka ?a ba da ga pFa tsa tSa dZa sa Sa za Za fa Ta Ca xa ha ca Da ja la ra g#a l/a l2a _:_ m@ m3 ma mE mE2 mI mO mU mA mi2 my mW mI: mA: mi: mu: mE: me: mo: my: mY: maU maI mEI mOY moU mA~ miR mUR" test_lang el b01fb02420612ea59c43bf6aff4175063bd93bcb "ma na pa ta ka ba da ga fa Ta sa xa va Da za Qa ra la _:_ ma me mi mo mu" test_lang en c4ed41c6ef4a43bae30f3469fe886c7b456dd02d "ma na Na pa ta ka ba da ga fa Ta sa Sa xa ha va Da za Za tSa dZa la ra ja wa t2a t#a d#a z#a r-a z/2a w#a m- n- N- _:_ mI mE ma m0 mV mU mi: mA: mO: mu: m3: mA@ mO@ mo@ mU@ mi@3 mIR mVR mi@ me@ mi m@ m3 me# mI# mI2 meI maI mOI moU maU maa mO2 maI@ maI3 maU@" test_lang en-029 cfd13bc57be7f495935c662472eae3d2c7200ebd "ma na Na pa ta ka ba da ga fa Ta sa Sa xa ha va Da za Za tSa dZa la ra ja wa t2a t#a d#a z#a r-a z/2a w#a m- n- N- _:_ mI mE ma m0 mV mU mi: mA: mO: mu: m3: mA@ mO@ mo@ mU@ mi@3 mIR mVR mi@ me@ mi m@ m3 me# mI# mI2 meI maI mOI moU maU maa mO2 maI@ maI3 maU@" diff --git a/tests/language-pronunciation.test b/tests/language-pronunciation.test index bef75ee4..3847d391 100755 --- a/tests/language-pronunciation.test +++ b/tests/language-pronunciation.test @@ -38,7 +38,7 @@ test_phonemes ca "Latn" "d'ona# a#m'o* k'E s@**,as f'Elis\na#jS;'O\nill'us k'omp test_phonemes cs "Latn" "n'exc j'iS hR^'i:Sne: s'aksof,oni J'a:blu: R'ozezv,utSi: s'i:n^ 'u:Jesn,i:mi t'o:ni v'aldzu\nt'aNga_! a kv'itskstepu\npR^'i:liZ Zl'ucoUtSki: k'u:n^ 'u:pjel J'a:belske: 'o:di" "Nechť již hříšné saxofony ďáblů rozezvučí síň úděsnými tóny waltzu, tanga a quickstepu. Příliš žluťoučký kůň úpěl ďábelské ódy." test_phonemes cy "Latn" "p'arkjaIs vY dZ'ak k'o:dI b'aU h'y:d l#'aUn d'u:r g'Er t'y: m'A:bOn" "Parciais fy jac codi baw hud llawn dŵr ger tŷ Mabon." test_phonemes da "Latn" "kv'isd?elt,?&jVn@-_! sp'?isd@-_! j'?orb?E3- m?ED fl'WD@-_!\nm'?Ens s'?i3-k?uskl,?0wn@-n w'Olth?V_! sp'?el@-D@-_! p?O s,?yl?of'?on\n'?ER?W,?Ol" "Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Walther spillede på xylofon. Ærøål." -test_phonemes de "Latn" "v'Ikto:r j'A:kt tsv'Wlf b'OkskEmpf3 kv'e:r_:_: _|,y:b3 de:n gr'o:s@n z'ylt3 d'aIC\nh'aItsWl@-r,yksto:s,abdEmpf,UN" "Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich. Heizölrückstoßabdämpfung." +test_phonemes de "Latn" "v'Ikto:r j'A:kt tsv'Wlf b'OkskEmpf3 kv'e:r_:_: _|,y:b3 de:n gr'o:s@n z'ylt3 d'aIC\nh'aItsWlr,yksto:s,abdEmpf,UN" "Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich. Heizölrückstoßabdämpfung." test_phonemes el "Grek" "ks,escep'azo t'im bz,ixofT'ora vD,eliQm'i;a" "Ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία." test_phonemes en "Latn" "D@ kw'Ik br'aUn f'0ks dZ'Vmps ,oUv3 D@ l'eIzi d'0g" "The quick brown fox jumps over the lazy dog" test_phonemes eo "Latn" ",eble tS'i;u kv'azaUd'etsa f,uSxoR'aZo dZoI'igos homt'ipon\n,exoS'andZo tS,i;uZ'aUde\np@-*'eskaU f@-*'eSa tS'exa mandZ'aZo" "Eble ĉiu kvazaŭ-deca fuŝĥoraĵo ĝojigos homtipon. Eĥoŝanĝo ĉiuĵaŭde, preskaŭ freŝa ĉeĥa manĝaĵo." @@ -111,7 +111,7 @@ test_phonemes tn "Latn" "B'aTU B'oKl B'a ts'i:tswl B'a g,olUl,os-'igill_:_: ll g test_phonemes tr "Latn" "piZ'amaL@ hast'a j'a:@z SofW*'E tSabudZ'ak Jyv&nd'I\nSISlid'E byj'Yk tS'Wp j@:@nLa*'@" "Pijamalı hasta yağız şoföre çabucak güvendi. Şişli’de büyük çöp yığınları." test_phonemes tt "Cyrl" "b0rL'Vq keSel'&r d'& 0z'0t h'&m 'yz 0brujLAr'V h'&m xoquqLAr'V jAGVnn'An t'iN bup'Vp tuAp'Ar\n0L0rG'A 0q'VL h'&m wWZ;d'An birelQ'&n h'&m b'&rb&rsen'& q0r0t'A tuGAnnArS;'A mWnAs&b&tt'& buLVrG'A tieSl'&r" "Барлык кешеләр дә азат һәм үз абруйлары һәм хокуклары ягыннан тиң бупып туапар. Аларга акыл һәм вөҗдан бирелгән һәм бәр-бәрсенә карата туганнарча мөнасәбәттә булырга тиешләр." test_phonemes ur "Arab" "t.#'Vnd. m'e~\n'e:k q'VH@t z'Vda ga:'o:n se: g'Vz@Rte: v'aqt 'e:k c'Vr.@cr.e:\nb'a:s@R 'o: f'a:RIQ S'axs. k'o: b'a:z J'Vl p'VRi n'Uma: 'aZ@dHe: naz.'aR 'a:e:" "ٹھنڈ میں، ایک قحط زدہ گاؤں سے گذرتے وقت ایک چڑچڑے، باأثر و فارغ شخص کو بعض جل پری نما اژدہے نظر آئے۔" -test_phonemes vi "Latn" "t['@3t[_| k'a:4_| m,OI6_| N'y@2j_| s'i1n^_| z'a:1_| d_'eU2_| d_,y@6c_| t['y6_| z'O1_| v,a:2_| _b'i2n^_| d_'a4N_| v'e2_| n^'@1n_| f'@4m_| v,a:2_| kw'i@2n_| l'@:I6_|\nm,OI6_| k,O1n_| N'y@2j_| d_'eU2_| d_,y@6c_| t['a:U6_| h'o@3_| _b'a:1n_| tS,O1_| l'i3_| tS'i3_| v,a:2_| l'y@1N_| t['@1m_| v,a:2_| k'@2n_| f,a:I4_| d_'oI3_| s'y4_| v,@:I3_| n^'aU1_| tS'O#1_| t['i2n^_| 'a1n^_| 'E7m_|" "Tất cả mọi người sinh ra đều được tự do và bình đẳng về nhân phẩm và quyền lợi. Mọi con người đều được tạo hóa ban cho lý trí và lương tâm và cần phải đối xử với nhau trong tình anh em." +test_phonemes vi "Latn" "t['@3t[_| k'a:4_| m,O6j_| N'y@2j_| s'i1n^_| z'a:1_| d_'e2w_| d_,y@6c_| t['y6_| z'O1_| v,a:2_| _b'i2n^_| d_'a4N_| v'e2_| n^'@1n_| f'@4m_| v,a:2_| kw'iE2n_| l'@:6j_|\nm,O6j_| k,O1n_| N'y@2j_| d_'e2w_| d_,y@6c_| t['a:6w_| hw'a:3_| _b'a:1n_| tS,O1_| l'i3_| tS'i3_| v,a:2_| l'y@1N_| t['@1m_| v,a:2_| k'@2n_| f,a:4j_| d_'o3j_| s'y4_| v,@:3j_| n^'a1w_| tS'O#1N_| t['i2n^_| 'e-1n^_| 'E7m_|" "Tất cả mọi người sinh ra đều được tự do và bình đẳng về nhân phẩm và quyền lợi. Mọi con người đều được tạo hóa ban cho lý trí và lương tâm và cần phải đối xử với nhau trong tình anh em." ##### Fallback to other languages in different scripts (language switch).