| ---------- | ---------- | ||||
| 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; |