* Restructure "option brackets" language option to "brackets" and "bracketsAnnounced". | * Restructure "option brackets" language option to "brackets" and "bracketsAnnounced". | ||||
* New Language option: "lowercaseSentence" for ending a sentence if a period is followed by a lower case letter. | * New Language option: "lowercaseSentence" for ending a sentence if a period is followed by a lower case letter. | ||||
* Added voice variants | * Added voice variants | ||||
* Renamed zh to cmn (Mandarin) | |||||
* Renamed zhy to yue (Cantonese) | |||||
bug fixes: | bug fixes: | ||||
* Fix reading malformed SSML (Christopher Brannon) | * Fix reading malformed SSML (Christopher Brannon) |
phsource/ph_bulgarian \ | phsource/ph_bulgarian \ | ||||
phsource/ph_catalan \ | phsource/ph_catalan \ | ||||
phsource/ph_cherokee \ | phsource/ph_cherokee \ | ||||
phsource/ph_cmn \ | |||||
phsource/ph_consonants \ | phsource/ph_consonants \ | ||||
phsource/ph_croatian \ | phsource/ph_croatian \ | ||||
phsource/ph_czech \ | phsource/ph_czech \ | ||||
phsource/ph_welsh \ | phsource/ph_welsh \ | ||||
phsource/ph_wolof \ | phsource/ph_wolof \ | ||||
phsource/ph_yoruba \ | phsource/ph_yoruba \ | ||||
phsource/ph_zh \ | |||||
phsource/ph_zh_yue \ | |||||
phsource/ph_yue \ | |||||
phsource/phonemes \ | phsource/phonemes \ | ||||
src/espeak-ng | src/espeak-ng | ||||
ESPEAK_DATA_PATH=$(CURDIR) src/espeak-ng --compile-intonations && \ | ESPEAK_DATA_PATH=$(CURDIR) src/espeak-ng --compile-intonations && \ | ||||
espeak-ng-data/bs_dict \ | espeak-ng-data/bs_dict \ | ||||
espeak-ng-data/ca_dict \ | espeak-ng-data/ca_dict \ | ||||
espeak-ng-data/chr_dict \ | espeak-ng-data/chr_dict \ | ||||
espeak-ng-data/cmn_dict \ | |||||
espeak-ng-data/cs_dict \ | espeak-ng-data/cs_dict \ | ||||
espeak-ng-data/cv_dict \ | espeak-ng-data/cv_dict \ | ||||
espeak-ng-data/cy_dict \ | espeak-ng-data/cy_dict \ | ||||
espeak-ng-data/ur_dict \ | espeak-ng-data/ur_dict \ | ||||
espeak-ng-data/uz_dict \ | espeak-ng-data/uz_dict \ | ||||
espeak-ng-data/vi_dict \ | espeak-ng-data/vi_dict \ | ||||
espeak-ng-data/zh_dict \ | |||||
espeak-ng-data/zhy_dict | |||||
espeak-ng-data/yue_dict | |||||
af: espeak-ng-data/af_dict | af: espeak-ng-data/af_dict | ||||
espeak-ng-data/af_dict: dictsource/af_list dictsource/af_rules dictsource/af_extra dictsource/af_emoji | espeak-ng-data/af_dict: dictsource/af_list dictsource/af_rules dictsource/af_extra dictsource/af_emoji | ||||
vi: espeak-ng-data/vi_dict | vi: espeak-ng-data/vi_dict | ||||
espeak-ng-data/vi_dict: dictsource/vi_list dictsource/vi_rules dictsource/vi_extra dictsource/vi_emoji | espeak-ng-data/vi_dict: dictsource/vi_list dictsource/vi_rules dictsource/vi_extra dictsource/vi_emoji | ||||
zh: espeak-ng-data/zh_dict | |||||
dictsource/zh_listx: | |||||
ln -svf extra/zh_listx dictsource/ | |||||
if HAVE_ZH_EXTENDED_DICTIONARY | |||||
espeak-ng-data/zh_dict: dictsource/zh_list dictsource/zh_rules dictsource/zh_listx dictsource/zh_extra dictsource/zh_emoji | |||||
cmn: espeak-ng-data/cmn_dict | |||||
dictsource/cmn_listx: | |||||
ln -svf extra/cmn_listx dictsource/ | |||||
if HAVE_CMN_EXTENDED_DICTIONARY | |||||
espeak-ng-data/cmn_dict: dictsource/cmn_list dictsource/cmn_rules dictsource/cmn_listx dictsource/cmn_extra dictsource/cmn_emoji | |||||
else | else | ||||
espeak-ng-data/zh_dict: dictsource/zh_list dictsource/zh_rules dictsource/zh_extra dictsource/zh_emoji | |||||
espeak-ng-data/cmn_dict: dictsource/cmn_list dictsource/cmn_rules dictsource/cmn_extra dictsource/cmn_emoji | |||||
endif | endif | ||||
zhy: espeak-ng-data/zhy_dict | |||||
dictsource/zhy_listx: | |||||
ln -svf extra/zhy_listx dictsource/ | |||||
if HAVE_ZHY_EXTENDED_DICTIONARY | |||||
espeak-ng-data/zhy_dict: dictsource/zhy_list dictsource/zhy_rules dictsource/zhy_extra dictsource/zhy_listx dictsource/zhy_emoji | |||||
yue: espeak-ng-data/yue_dict | |||||
dictsource/yue_listx: | |||||
ln -svf extra/yue_listx dictsource/ | |||||
if HAVE_YUE_EXTENDED_DICTIONARY | |||||
espeak-ng-data/yue_dict: dictsource/yue_list dictsource/yue_rules dictsource/yue_extra dictsource/yue_listx dictsource/yue_emoji | |||||
else | else | ||||
espeak-ng-data/zhy_dict: dictsource/zhy_list dictsource/zhy_rules dictsource/zhy_extra dictsource/zhy_emoji | |||||
espeak-ng-data/yue_dict: dictsource/yue_list dictsource/yue_rules dictsource/yue_extra dictsource/yue_emoji | |||||
endif | endif | ||||
cd dictsource && ESPEAK_DATA_PATH=$(CURDIR) LD_LIBRARY_PATH=../src:${LD_LIBRARY_PATH} ../src/espeak-ng --compile=yue && cd .. | cd dictsource && ESPEAK_DATA_PATH=$(CURDIR) LD_LIBRARY_PATH=../src:${LD_LIBRARY_PATH} ../src/espeak-ng --compile=yue && cd .. | ||||
dictsource/zhy_emoji: | |||||
dictsource/yue_emoji: | |||||
@echo " EMOJI $@" | @echo " EMOJI $@" | ||||
@if test x"${CLDR_PATH}" = x ; then \ | @if test x"${CLDR_PATH}" = x ; then \ | ||||
touch $@ ; \ | touch $@ ; \ | ||||
espeak-ng-data/mbrola_ph/ar1_phtrans \ | espeak-ng-data/mbrola_ph/ar1_phtrans \ | ||||
espeak-ng-data/mbrola_ph/ar2_phtrans \ | espeak-ng-data/mbrola_ph/ar2_phtrans \ | ||||
espeak-ng-data/mbrola_ph/ca_phtrans \ | espeak-ng-data/mbrola_ph/ca_phtrans \ | ||||
espeak-ng-data/mbrola_ph/cmn_phtrans \ | |||||
espeak-ng-data/mbrola_ph/cr1_phtrans \ | espeak-ng-data/mbrola_ph/cr1_phtrans \ | ||||
espeak-ng-data/mbrola_ph/cs_phtrans \ | espeak-ng-data/mbrola_ph/cs_phtrans \ | ||||
espeak-ng-data/mbrola_ph/de2_phtrans \ | espeak-ng-data/mbrola_ph/de2_phtrans \ | ||||
espeak-ng-data/mbrola_ph/tr1_phtrans \ | espeak-ng-data/mbrola_ph/tr1_phtrans \ | ||||
espeak-ng-data/mbrola_ph/us_phtrans \ | espeak-ng-data/mbrola_ph/us_phtrans \ | ||||
espeak-ng-data/mbrola_ph/us3_phtrans \ | espeak-ng-data/mbrola_ph/us3_phtrans \ | ||||
espeak-ng-data/mbrola_ph/vz_phtrans \ | |||||
espeak-ng-data/mbrola_ph/zh_phtrans | |||||
espeak-ng-data/mbrola_ph/vz_phtrans | |||||
espeak-ng-data/mbrola_ph/%_phtrans: phsource/mbrola/% src/espeak-ng | espeak-ng-data/mbrola_ph/%_phtrans: phsource/mbrola/% src/espeak-ng | ||||
mkdir -p espeak-ng-data/mbrola_ph | mkdir -p espeak-ng-data/mbrola_ph |
[AS_HELP_STRING([--with-extdict-ru], [use the extended Russian Dictionary file @<:@default=no@:>@])], | [AS_HELP_STRING([--with-extdict-ru], [use the extended Russian Dictionary file @<:@default=no@:>@])], | ||||
[]) | []) | ||||
AC_ARG_WITH([extdict-zh], | |||||
[AS_HELP_STRING([--with-extdict-zh], [use the extended Mandarin Chinese Dictionary file @<:@default=no@:>@])], | |||||
AC_ARG_WITH([extdict-cmn], | |||||
[AS_HELP_STRING([--with-extdict-cmn], [use the extended Mandarin Chinese Dictionary file @<:@default=no@:>@])], | |||||
[]) | []) | ||||
AC_ARG_WITH([extdict-zhy], | |||||
[AS_HELP_STRING([--with-extdict-zhy], [use the extended Cantonese Chinese Dictionary file @<:@default=no@:>@])], | |||||
AC_ARG_WITH([extdict-yue], | |||||
[AS_HELP_STRING([--with-extdict-yue], [use the extended Cantonese Chinese Dictionary file @<:@default=no@:>@])], | |||||
[]) | []) | ||||
AC_ARG_WITH([libfuzzer], | AC_ARG_WITH([libfuzzer], | ||||
have_extdict_ru=no | have_extdict_ru=no | ||||
fi | fi | ||||
if test "$with_extdict_zh" = "yes" ; then | |||||
have_extdict_zh=yes | |||||
if test "$with_extdict_cmn" = "yes" ; then | |||||
have_extdict_cmn=yes | |||||
else | else | ||||
have_extdict_zh=no | |||||
have_extdict_cmn=no | |||||
fi | fi | ||||
if test "$with_extdict_zhy" = "yes" ; then | |||||
have_extdict_zhy=yes | |||||
if test "$with_extdict_yue" = "yes" ; then | |||||
have_extdict_yue=yes | |||||
else | else | ||||
have_extdict_zhy=no | |||||
have_extdict_yue=no | |||||
fi | fi | ||||
AM_CONDITIONAL(HAVE_RU_EXTENDED_DICTIONARY, [test x"$have_extdict_ru" = xyes]) | AM_CONDITIONAL(HAVE_RU_EXTENDED_DICTIONARY, [test x"$have_extdict_ru" = xyes]) | ||||
AM_CONDITIONAL(HAVE_ZH_EXTENDED_DICTIONARY, [test x"$have_extdict_zh" = xyes]) | |||||
AM_CONDITIONAL(HAVE_ZHY_EXTENDED_DICTIONARY, [test x"$have_extdict_zhy" = xyes]) | |||||
AM_CONDITIONAL(HAVE_CMN_EXTENDED_DICTIONARY, [test x"$have_extdict_cmn" = xyes]) | |||||
AM_CONDITIONAL(HAVE_YUE_EXTENDED_DICTIONARY, [test x"$have_extdict_yue" = xyes]) | |||||
dnl ================================================================ | dnl ================================================================ | ||||
dnl Compiler warnings. | dnl Compiler warnings. | ||||
Extended Dictionaries: | Extended Dictionaries: | ||||
Russian: ${have_extdict_ru} | Russian: ${have_extdict_ru} | ||||
Chinese (Mandarin): ${have_extdict_zh} | |||||
Chinese (Cantonese): ${have_extdict_zhy} | |||||
Chinese (Mandarin): ${have_extdict_cmn} | |||||
Chinese (Cantonese): ${have_extdict_yue} | |||||
]) | ]) |
// zhy_list - the Cantonese dictionary file for eSpeak and Ekho | |||||
// yue_list - the Cantonese dictionary file for eSpeak and Ekho | |||||
// Maintainer: Cameron Wong, hgneng at gmail.com | // Maintainer: Cameron Wong, hgneng at gmail.com | ||||
// Website: http://www.eguidedog.net/cantonese.php | // Website: http://www.eguidedog.net/cantonese.php | ||||
// License: Creative Commons Attribution-Share Alike 3.0 | // License: Creative Commons Attribution-Share Alike 3.0 |
| Option | Extended Dictionary | Default | | | Option | Extended Dictionary | Default | | ||||
|----------------------|---------------------|---------| | |----------------------|---------------------|---------| | ||||
| `--with-extdict-ru` | Russian | no | | | `--with-extdict-ru` | Russian | no | | ||||
| `--with-extdict-zh` | Mandarin Chinese | no | | |||||
| `--with-extdict-zhy` | Cantonese | no | | |||||
| `--with-extdict-cmn` | Mandarin Chinese | no | | |||||
| `--with-extdict-yue` | Cantonese | no | | |||||
The extended dictionaries are taken from | The extended dictionaries are taken from | ||||
[http://espeak.sourceforge.net/data/](http://espeak.sourceforge.net/data/) and | [http://espeak.sourceforge.net/data/](http://espeak.sourceforge.net/data/) and |
language zh-cmn | language zh-cmn | ||||
language zh | language zh | ||||
phonemes zh | |||||
dictionary zh | |||||
phonemes cmn | |||||
dictionary cmn | |||||
words 1 | words 1 | ||||
pitch 80 118 | pitch 80 118 | ||||
language zh-yue | language zh-yue | ||||
language zh 8 | language zh 8 | ||||
phonemes zhy | |||||
dictionary zhy | |||||
phonemes yue | |||||
dictionary yue | |||||
// interpret English letters as 1=English words, 2=jyutping | // interpret English letters as 1=English words, 2=jyutping | ||||
dictrules 1 | dictrules 1 |
phonemetable ba base1 | phonemetable ba base1 | ||||
include ph_bashkir | include ph_bashkir | ||||
phonemetable cmn base1 | |||||
include ph_cmn | |||||
phonemetable cy base1 | phonemetable cy base1 | ||||
include ph_welsh | include ph_welsh | ||||
phonemetable wo base1 | phonemetable wo base1 | ||||
include ph_wolof | include ph_wolof | ||||
phonemetable zh base1 | |||||
include ph_zh | |||||
phonemetable zhy base1 | |||||
include ph_zh_yue | |||||
phonemetable yue base1 | |||||
include ph_yue | |||||
// *** Tables extending base2 *** | // *** Tables extending base2 *** | ||||
break; | break; | ||||
case L3('c', 'm', 'n'): // no break, just go to 'zh' case | case L3('c', 'm', 'n'): // no break, just go to 'zh' case | ||||
case L3('y', 'u', 'e'): | case L3('y', 'u', 'e'): | ||||
case L('z','h'): | |||||
case L('z','h'): // zh is used for backwards compatibility. Prefer cmn or yue. | |||||
{ | { | ||||
static const short stress_lengths_zh[8] = { 230, 150, 230, 230, 230, 0, 240, 250 }; // 1=tone5. end-of-sentence, 6=tone 1&4, 7=tone 2&3 | static const short stress_lengths_zh[8] = { 230, 150, 230, 230, 230, 0, 240, 250 }; // 1=tone5. end-of-sentence, 6=tone 1&4, 7=tone 2&3 | ||||
static const unsigned char stress_amps_zh[] = { 22, 16, 22, 22, 22, 22, 22, 22 }; | static const unsigned char stress_amps_zh[] = { 22, 16, 22, 22, 22, 22, 22, 22 }; |
<Target Name="vi" Inputs="$(ProjectDir)..\..\dictsource\vi_rules;$(ProjectDir)..\..\dictsource\vi_list" Outputs="$(ProjectDir)..\..\espeak-ng-data\vi_dict" DependsOnTargets="Phonemes"> | <Target Name="vi" Inputs="$(ProjectDir)..\..\dictsource\vi_rules;$(ProjectDir)..\..\dictsource\vi_list" Outputs="$(ProjectDir)..\..\espeak-ng-data\vi_dict" DependsOnTargets="Phonemes"> | ||||
<Exec Command="cd $(ProjectDir)..\..\dictsource && $(TargetDir)espeak-ng.exe --path=$(ProjectDir)..\.. --compile=vi" /> | <Exec Command="cd $(ProjectDir)..\..\dictsource && $(TargetDir)espeak-ng.exe --path=$(ProjectDir)..\.. --compile=vi" /> | ||||
</Target> | </Target> | ||||
<Target Name="zh" Inputs="$(ProjectDir)..\..\dictsource\zh_rules;$(ProjectDir)..\..\dictsource\zh_list" Outputs="$(ProjectDir)..\..\espeak-ng-data\zh_dict" DependsOnTargets="Phonemes"> | |||||
<Exec Command="cd $(ProjectDir)..\..\dictsource && $(TargetDir)espeak-ng.exe --path=$(ProjectDir)..\.. --compile=zh" /> | |||||
<Target Name="cmn" Inputs="$(ProjectDir)..\..\dictsource\cmn_rules;$(ProjectDir)..\..\dictsource\cmn_list" Outputs="$(ProjectDir)..\..\espeak-ng-data\cmn_dict" DependsOnTargets="Phonemes"> | |||||
<Exec Command="cd $(ProjectDir)..\..\dictsource && $(TargetDir)espeak-ng.exe --path=$(ProjectDir)..\.. --compile=cmn" /> | |||||
</Target> | </Target> | ||||
<Target Name="zhy" Inputs="$(ProjectDir)..\..\dictsource\zhy_rules;$(ProjectDir)..\..\dictsource\zhy_list" Outputs="$(ProjectDir)..\..\espeak-ng-data\zhy_dict" DependsOnTargets="Phonemes"> | |||||
<Target Name="yue" Inputs="$(ProjectDir)..\..\dictsource\yue_rules;$(ProjectDir)..\..\dictsource\yue_list" Outputs="$(ProjectDir)..\..\espeak-ng-data\yue_dict" DependsOnTargets="Phonemes"> | |||||
<Exec Command="cd $(ProjectDir)..\..\dictsource && $(TargetDir)espeak-ng.exe --path=$(ProjectDir)..\.. --compile=yue" /> | <Exec Command="cd $(ProjectDir)..\..\dictsource && $(TargetDir)espeak-ng.exe --path=$(ProjectDir)..\.. --compile=yue" /> | ||||
</Target> | </Target> | ||||
<Target Name="Dictionaries" DependsOnTargets="af;am;an;ar;as;az;bg;bn;bs;ca;cs;cy;da;de;el;en;eo;es;et;eu;fa;fi;fr;ga;gd;gn;grc;gu;hi;hr;hu;hy;ia;id;is;it;jbo;ja;ka;kl;kn;ko;ku;ky;la;lfn;lt;lv;mk;ml;mr;ms;mt;my;nci;ne;nl;no;om;or;pa;pap;pl;pt;ro;ru;si;sk;sl;sq;sr;sv;sw;ta;te;tn;tr;tt;ur;vi;zh;zhy" /> | |||||
<Target Name="Dictionaries" DependsOnTargets="af;am;an;ar;as;az;bg;bn;bs;ca;cmn;cs;cy;da;de;el;en;eo;es;et;eu;fa;fi;fr;ga;gd;gn;grc;gu;hi;hr;hu;hy;ia;id;is;it;jbo;ja;ka;kl;kn;ko;ku;ky;la;lfn;lt;lv;mk;ml;mr;ms;mt;my;nci;ne;nl;no;om;or;pa;pap;pl;pt;ro;ru;si;sk;sl;sq;sr;sv;sw;ta;te;tn;tr;tt;ur;vi;yue" /> | |||||
</Project> | </Project> |
<Component Id="vi_dict" Win64="$(var.Win64)" Guid="F4E1855E-A1C8-4DE1-A72F-0835C7794314"> | <Component Id="vi_dict" Win64="$(var.Win64)" Guid="F4E1855E-A1C8-4DE1-A72F-0835C7794314"> | ||||
<File Name="vi_dict" Source="$(var.ProjectDir)..\..\..\espeak-ng-data\vi_dict" KeyPath="yes"/> | <File Name="vi_dict" Source="$(var.ProjectDir)..\..\..\espeak-ng-data\vi_dict" KeyPath="yes"/> | ||||
</Component> | </Component> | ||||
<Component Id="zh_dict" Win64="$(var.Win64)" Guid="6DF6E437-BF8B-4FCD-B094-D88C65ACDE6E"> | |||||
<File Name="zh_dict" Source="$(var.ProjectDir)..\..\..\espeak-ng-data\zh_dict" KeyPath="yes"/> | |||||
<Component Id="cmn_dict" Win64="$(var.Win64)" Guid="6DF6E437-BF8B-4FCD-B094-D88C65ACDE6E"> | |||||
<File Name="cmn_dict" Source="$(var.ProjectDir)..\..\..\espeak-ng-data\cmn_dict" KeyPath="yes"/> | |||||
</Component> | </Component> | ||||
<Component Id="zhy_dict" Win64="$(var.Win64)" Guid="D6BF57DA-A408-40FC-9D8E-610C8AED5836"> | |||||
<File Name="zhy_dict" Source="$(var.ProjectDir)..\..\..\espeak-ng-data\zhy_dict" KeyPath="yes"/> | |||||
<Component Id="yue_dict" Win64="$(var.Win64)" Guid="D6BF57DA-A408-40FC-9D8E-610C8AED5836"> | |||||
<File Name="yue_dict" Source="$(var.ProjectDir)..\..\..\espeak-ng-data\yue_dict" KeyPath="yes"/> | |||||
</Component> | </Component> | ||||
<Directory Id="VOICES" Name="voices"> | <Directory Id="VOICES" Name="voices"> | ||||
<Directory Id="AAV" Name="aav"> | <Directory Id="AAV" Name="aav"> | ||||
</ComponentGroup> | </ComponentGroup> | ||||
<ComponentGroup Id="LangChineseCantonese"> | <ComponentGroup Id="LangChineseCantonese"> | ||||
<ComponentRef Id="yue"/> | <ComponentRef Id="yue"/> | ||||
<ComponentRef Id="zhy_dict"/> | |||||
<ComponentRef Id="yue_dict"/> | |||||
</ComponentGroup> | </ComponentGroup> | ||||
<ComponentGroup Id="LangChineseMandarin"> | <ComponentGroup Id="LangChineseMandarin"> | ||||
<ComponentRef Id="cmn"/> | <ComponentRef Id="cmn"/> | ||||
<ComponentRef Id="zh_dict"/> | |||||
<ComponentRef Id="cmn_dict"/> | |||||
</ComponentGroup> | </ComponentGroup> | ||||
<ComponentGroup Id="LangCroatian"> | <ComponentGroup Id="LangCroatian"> | ||||
<ComponentRef Id="hr"/> | <ComponentRef Id="hr"/> |