---------- | ---------- | ||||
The eSpeak NG (Next Generation) Text-to-Speech program is an open source speech | The eSpeak NG (Next Generation) Text-to-Speech program is an open source speech | ||||
synthesizer that supports [100 languages and accents](docs/languages.md). | |||||
synthesizer that supports [99 languages and accents](docs/languages.md). | |||||
It is based on the eSpeak engine created by Jonathan Duddington. It uses | It is based on the eSpeak engine created by Jonathan Duddington. It uses | ||||
spectral formant synthesis by default which sounds robotic, but can be | spectral formant synthesis by default which sounds robotic, but can be | ||||
configured to use Klatt formant synthesis or MBROLA to give it a more natural | configured to use Klatt formant synthesis or MBROLA to give it a more natural |
| `gmw` | `en-GB-x-gbcwmd` | West Germanic | English | West Midlands | | | `gmw` | `en-GB-x-gbcwmd` | West Germanic | English | West Midlands | | ||||
| `art` | `eo` | Constructed | Esperanto | | | | `art` | `eo` | Constructed | Esperanto | | | ||||
| `urj` | `et` | Uralic | Estonian | | | | `urj` | `et` | Uralic | Estonian | | | ||||
| `ira` | `fa` | Iranian | Persian<sup>[1]</sup> | | | |||||
| `ira` | `fa-en-us` | Iranian | Persian<sup>[2]</sup> | | | |||||
| `ira` | `fa-Latn` | Iranian | Persian<sup>[3]</sup> | | | |||||
| `ira` | `fa` | Iranian | Persian | | | |||||
| `ira` | `fa-Latn` | Iranian | Persian<sup>[1]</sup> | | | |||||
| `urj` | `fi` | Uralic | Finnish | | | | `urj` | `fi` | Uralic | Finnish | | | ||||
| `roa` | `fr-BE` | Romance | French | Belgium | | | `roa` | `fr-BE` | Romance | French | Belgium | | ||||
| `roa` | `fr` | Romance | French | France | | | `roa` | `fr` | Romance | French | France | | ||||
| `poz` | `id` | Malayo-Polynesian | Indonesian | | | | `poz` | `id` | Malayo-Polynesian | Indonesian | | | ||||
| `art` | `ia` | Constructed | Interlingua | | | | `art` | `ia` | Constructed | Interlingua | | | ||||
| `roa` | `it` | Romance | Italian | | | | `roa` | `it` | Romance | Italian | | | ||||
| `jpx` | `jp` | Japanese | Japanese<sup>[4]</sup> | | | |||||
| `jpx` | `jp` | Japanese | Japanese<sup>[2]</sup> | | | |||||
| `dra` | `kn` | Dravidian | Kannada | | | | `dra` | `kn` | Dravidian | Kannada | | | ||||
| `inc` | `kok` | Indic | Konkani | | | | `inc` | `kok` | Indic | Konkani | | | ||||
| | `ko` | | Korean | | | | | `ko` | | Korean | | | ||||
| `inc` | `or` | Indic | Oriya | | | | `inc` | `or` | Indic | Oriya | | | ||||
| `cus` | `om` | Cushitic | Oromo | | | | `cus` | `om` | Cushitic | Oromo | | | ||||
| `roa` | `pap` | Romance | Papiamento | | | | `roa` | `pap` | Romance | Papiamento | | | ||||
| `und` | `und-fonipa` | | Phonemes<sup>[5]</sup> | IPA | | |||||
| `und` | `und-fonipa` | | Phonemes<sup>[3]</sup> | IPA | | |||||
| `zls` | `pl` | South Slavic | Polish | | | | `zls` | `pl` | South Slavic | Polish | | | ||||
| `roa` | `pt-BR` | Romance | Portuguese | Brazillian | | | `roa` | `pt-BR` | Romance | Portuguese | Brazillian | | ||||
| `roa` | `pt-PT` | Romance | Portuguese | Portugal | | | `roa` | `pt-PT` | Romance | Portuguese | Portugal | | ||||
| `aav` | `vi-VN-x-south` | Austroasiatic | Vietnamese | Southern Vietnam | | | `aav` | `vi-VN-x-south` | Austroasiatic | Vietnamese | Southern Vietnam | | ||||
| `cel` | `cy` | Celtic | Welsh | | | | `cel` | `cy` | Celtic | Welsh | | | ||||
[1] Includes support for reading British English text. | |||||
[1] Farsi/Persian written using English (Latin) characters. | |||||
[2] Includes support for reading American English text. | |||||
[2] Currently, only Hiragana and Katakana are supported. | |||||
[3] Farsi/Persian written using English (Latin) characters. | |||||
[4] Currently, only Hiragana and Katakana are supported. | |||||
[5] Currently only supported using the `[[...]]` phoneme blocks. | |||||
[3] Currently only supported using the `[[...]]` phoneme blocks. |
- [charset](#charset) | - [charset](#charset) | ||||
- [dictmin](#dictmin) | - [dictmin](#dictmin) | ||||
- [alphabet2](#alphabet2) | - [alphabet2](#alphabet2) | ||||
- [dictdialect](#dictdialect) | |||||
---------- | ---------- | ||||
Alphabets names include: latin, cyr (cyrillic), ar (arabic). The default | Alphabets names include: latin, cyr (cyrillic), ar (arabic). The default | ||||
language for latin alphabet is English. | language for latin alphabet is English. | ||||
### dictdialect | |||||
dictdialect <dialect> | |||||
Words can be marked in the `*_list` or `*_rules` file to be spoken using | |||||
a foreign voice. This `dictdialect` attribute can be used to specify | |||||
which dialect of the foreign language should be used, instead of the | |||||
default dialect. The currently available dialects are: | |||||
* `en-us` (US English) | |||||
* `es-la` (Latin American Spanish) | |||||
e.g. | |||||
dictdialect en-us | |||||
This means that any words or rules which are made with `_^_EN` will be | |||||
spoken with the US English voice instead of the default UK English | |||||
voice. | |||||
Additional attributes are available to set various internal options | Additional attributes are available to set various internal options | ||||
which control how language is processed. These would normally be set in | which control how language is processed. These would normally be set in | ||||
the program code rather than in a voice file. | the program code rather than in a voice file. |
name Persian+English-US | |||||
language fa | |||||
dictdialect en-us | |||||
maintainer Shadyar Khodayari <[email protected]> | |||||
status mature | |||||
// This language reads Persian and English with U.S pronunciation, as Persian uses a collection of special characters which differs entirely from English characters. |
V_SPEED, | V_SPEED, | ||||
V_DICTMIN, | V_DICTMIN, | ||||
V_ALPHABET2, | V_ALPHABET2, | ||||
V_DICTDIALECT, | |||||
// these need a phoneme table to have been specified | // these need a phoneme table to have been specified | ||||
V_REPLACE, | V_REPLACE, | ||||
{ "speed", V_SPEED }, | { "speed", V_SPEED }, | ||||
{ "dict_min", V_DICTMIN }, | { "dict_min", V_DICTMIN }, | ||||
{ "alphabet2", V_ALPHABET2 }, | { "alphabet2", V_ALPHABET2 }, | ||||
{ "dictdialect", V_DICTDIALECT }, | |||||
// these just set a value in langopts.param[] | // these just set a value in langopts.param[] | ||||
{ "l_dieresis", 0x100+LOPT_DIERESES }, | { "l_dieresis", 0x100+LOPT_DIERESES }, | ||||
{ NULL, 0 } | { NULL, 0 } | ||||
}; | }; | ||||
static MNEM_TAB dict_dialects[] = { | |||||
{ "en-us", DICTDIALECT_EN_US }, | |||||
{ "es-la", DICTDIALECT_ES_LA }, | |||||
{ NULL, 0 } | |||||
}; | |||||
#define N_VOICE_VARIANTS 12 | #define N_VOICE_VARIANTS 12 | ||||
const char variants_either[N_VOICE_VARIANTS] = { 1, 2, 12, 3, 13, 4, 14, 5, 11, 0 }; | const char variants_either[N_VOICE_VARIANTS] = { 1, 2, 12, 3, 13, 4, 14, 5, 11, 0 }; | ||||
const char variants_male[N_VOICE_VARIANTS] = { 1, 2, 3, 4, 5, 6, 0 }; | const char variants_male[N_VOICE_VARIANTS] = { 1, 2, 3, 4, 5, 6, 0 }; | ||||
fprintf(stderr, "alphabet name '%s' not found\n", name1); | fprintf(stderr, "alphabet name '%s' not found\n", name1); | ||||
} | } | ||||
break; | break; | ||||
case V_DICTDIALECT: | |||||
// specify a dialect to use for foreign words, eg, en-us for _^_EN | |||||
if (sscanf(p, "%s", name1) == 1) { | |||||
if ((ix = LookupMnem(dict_dialects, name1)) > 0) | |||||
langopts->dict_dialect |= (1 << ix); | |||||
else | |||||
fprintf(stderr, "dictdialect name '%s' not recognized\n", name1); | |||||
} | |||||
break; | |||||
case V_MAINTAINER: | case V_MAINTAINER: | ||||
case V_STATUS: | case V_STATUS: | ||||
break; | break; |