| @@ -1,57 +1,32 @@ | |||
| # eSpeak Text-to-Speech | |||
| [](https://flattr.com/submit/auto?user_id=rhdunn&url=https://github.com/rhdunn/espeak&title=espeak&language=&tags=github&category=software) | |||
| # eSpeak NG Text-to-Speech | |||
| - [Build Dependencies](#build-dependencies) | |||
| - [Debian](#debian) | |||
| - [Building](#building) | |||
| - [Audio Output Configuration](#audio-output-configuration) | |||
| - [eSpeak Feature Configuration](#espeak-feature-configuration) | |||
| - [eSpeak NG Feature Configuration](#espeak-ng-feature-configuration) | |||
| - [Extended Dictionary Configuration](#extended-dictionary-configuration) | |||
| - [Testing](#testing) | |||
| - [Installing](#installing) | |||
| - [Building Voices](#building-voices) | |||
| - [Adding New Voices](#adding-new-voices) | |||
| - [Branching Structure and Changes](#branching-structure-and-changes) | |||
| - [upstream](#upstream) | |||
| - [Setting Up git-svn](#setting-up-git-svn) | |||
| - [development](#development) | |||
| - [Praat Modifications](#praat-modifications) | |||
| - [master](#master) | |||
| - [Build System](#build-system) | |||
| - [espeakedit](#espeakedit) | |||
| - [Bug Fixes](#bug-fixes) | |||
| - [android](#android) | |||
| - [historical](#historical) | |||
| - [Praat Changes](#praat-changes) | |||
| - [eSpeak for Android](#espeak-for-android) | |||
| - [Historical Versions](#historical-versions) | |||
| - [Bugs](#bugs) | |||
| - [License Information](#license-information) | |||
| ---------- | |||
| The [eSpeak Text-to-Speech](http://espeak.sourceforge.net/) program is an open | |||
| source speech synthesizer that supports over 70 languages. It uses 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 sound. | |||
| This is a mirror of the eSpeak sources with the following improvements on the | |||
| *master* branch: | |||
| 1. An autotools-based build system that supports building the phoneme data and | |||
| language dictionaries from source on POSIX systems. | |||
| 2. Optional support for the extended Russian and Chinese dictionaries from | |||
| [http://espeak.sourceforge.net/data/](http://espeak.sourceforge.net/data/). | |||
| 3. Detection of the supported audio APIs via the `configure` script — no need to | |||
| modify the build files. | |||
| 4. The NVDA voice variants are included in the `espeak-data/voices/!v` directory. | |||
| 5. Add support for the Oromo language (`om`, contributed by [gude432](https://github.com/gude432)). | |||
| The eSpeak NG (Next Generation) Text-to-Speech program is an open source speech | |||
| synthesizer that supports over 70 languages. It is based on the eSpeak engine | |||
| created by Jonathan Duddington. It uses 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 sound. | |||
| ## Build Dependencies | |||
| In order to build eSpeak, you need: | |||
| In order to build eSpeak NG, you need: | |||
| 1. a functional autotools system (`make`, `autoconf`, `automake`, `libtool` | |||
| and `pkg-config`); | |||
| @@ -84,7 +59,7 @@ be built via the standard autotools commands: | |||
| $ make | |||
| __NOTE:__ The configure command detects various platform differences that | |||
| the espeak makefiles don't cater for (e.g. different wxWidgets version) | |||
| the espeak-ng makefiles don't cater for (e.g. different wxWidgets version) | |||
| and detect the available audio setup to use automatically. | |||
| ### Audio Output Configuration | |||
| @@ -97,11 +72,11 @@ The following `configure` options control which audio interfaces to use: | |||
| | `--with-portaudio` | PortAudio | yes | | |||
| | `--with-sada` | SADA (Solaris) | no | | |||
| If pulseaudio and portaudio are both enabled and available, eSpeak will choose | |||
| If pulseaudio and portaudio are both enabled and available, eSpeak NG will choose | |||
| which one to use at runtime, trying pulseaudio first before falling back to | |||
| portaudio. | |||
| ### eSpeak Feature Configuration | |||
| ### eSpeak NG Feature Configuration | |||
| The following `configure` options control which eSpeak features are enabled: | |||
| @@ -123,11 +98,10 @@ to build: | |||
| | `--with-extdict-zh` | Mandarin Chinese | no | | |||
| | `--with-extdict-zhy` | Cantonese | no | | |||
| If the option has the value `no`, the extended dictionary is not built; instead, | |||
| the version from upstream espeak is build. If the option has the value `yes`, | |||
| the extended dictionary is built; that is, the extra data from | |||
| [http://espeak.sourceforge.net/data/](http://espeak.sourceforge.net/data/) | |||
| is used. | |||
| The extended dictionaries are taken from | |||
| [http://espeak.sourceforge.net/data/](http://espeak.sourceforge.net/data/) and | |||
| provide better coverage for those languages, while increasing the resulting | |||
| dictionary size. | |||
| ## Testing | |||
| @@ -146,7 +120,7 @@ version). | |||
| ## Installing | |||
| You can install eSpeak by running the following command: | |||
| You can install eSpeak NG by running the following command: | |||
| $ sudo make LIBDIR=/usr/lib/x86_64-linux-gnu install | |||
| @@ -176,7 +150,7 @@ all the voices. This will make it easier to spot errors. | |||
| ## Adding New Voices | |||
| Once you have added the necessary files to eSpeak to support the new voice, | |||
| Once you have added the necessary files to eSpeak NG to support the new voice, | |||
| you can then run: | |||
| $ ./mkdictlist Makefile.am | |||
| @@ -185,202 +159,22 @@ This will update the build system so that `make` will build the new voice | |||
| in addition to building everything else, and add a `<lang-code>` target | |||
| for building just that voice. | |||
| ## Branching Structure and Changes | |||
| The following sections describe the different branches in this repository, | |||
| what they are used for and how they relate to the upstream version of eSpeak | |||
| (including details of any changes made to eSpeak). | |||
| Changes are merged in the following order: | |||
| upstream => development => master => android | |||
| ### upstream | |||
| The *upstream* branch contains the unmodified eSpeak sources imported from | |||
| the [espeak]() subversion repository using the `git svn` command. | |||
| #### Setting Up git-svn | |||
| In order to synchronize with the SVN repository, you need to initialize git-svn: | |||
| $ git svn init https://svn.code.sf.net/p/espeak/code/trunk | |||
| Next, you need to make git-svn look for commits on the upstream branch: | |||
| $ git update-ref refs/remotes/git-svn refs/remotes/origin/upstream | |||
| The eSpeak SVN repository moved, so you need to inform git-svn to rewrite the | |||
| URLs to the old location: | |||
| $ git config svn-remote.svn.rewriteRoot https://espeak.svn.sourceforge.net/svnroot/espeak/trunk | |||
| Now you can update from SVN by running: | |||
| $ git checkout upstream && git svn rebase | |||
| ### development | |||
| The *development* branch replaces the code from subversion with the code | |||
| from [http://espeak.sourceforge.net/test/latest.html](http://espeak.sourceforge.net/test/latest.html). | |||
| It combines the *eSpeak* and *espeakedit* zip files containing the Linux | |||
| binaries with source code to match the subversion code. | |||
| The motivation for using these development releases is that the source | |||
| code from the subversion repositories is often incomplete -- either | |||
| missing several files, or not including certain changes. This is also | |||
| why the *master* branch pulls changes from *development*, not *upstream*. | |||
| The following changes are performed when merging the two zip files: | |||
| 1. the `src/Makefile` in the *espeakedit* code has been renamed to | |||
| `src/Makefile.espeakedit` to match the name in subversion; | |||
| 2. the *espeakedit* files have been merged into the *eSpeak* files | |||
| as the subversion repository does not split out the two; | |||
| 3. the `platforms/riscos/Makefile,fe1` file is moved to `platforms/riscos/Makefile`; | |||
| 4. the `platforms/riscos/copysource,feb` file is moved to `platforms/riscos/copysource`; | |||
| 5. the `phsource/vnasal/.directory` file is removed — this is used by the | |||
| `Dolphin` file browser and should not be included in the sources; | |||
| 6. the `docs` folder contains an older version of the documentation, so these | |||
| changes are reverted; | |||
| 7. the `espeak-data/voices/asia/ko` file is missing from the development | |||
| sources, but none of the other related Korean voice files have been removed | |||
| so the file is restored to the upstream version; | |||
| 8. the executable bit is removed from the source files — this is because | |||
| there are no files that need to be executable in the source tree. | |||
| The following files are removed (excluded via `.gitignore`) from the sources: | |||
| 1. the Linux binaries (including the voice/phoneme data) — these are not | |||
| part of the source code; | |||
| 2. generated files such as `dictsource/dict_phonemes` — these are not part | |||
| of the source code; | |||
| 3. `praat-mod` — this is not included as part of the subversion code (see | |||
| [Praat Modifications](#praat-modifications) for where to get these | |||
| changes); | |||
| 4. `Makefile` — this is a copy of `src/Makefile`; | |||
| 5. `ReadMe` — this is not provided in the subversion codebase, instead a | |||
| more informative version is located in this `README.md` file; | |||
| 6. `ChangeLog.txt` — this is not provided in the subversion codebase, is | |||
| incomplete and there is a more detailed change log available in the | |||
| subversion and git repositories; | |||
| 7. `License.txt` — this is a copy of the GPLv3 license; it is not provided | |||
| in the subversion repository; for this git mirror, the GPLv3 license is | |||
| located in the `COPYING` file as per GNU guidelines. | |||
| **NOTE:** The generated files `phsource/compile_report` and | |||
| `dictsource/dict_phonemes` are included in the subversion repository. They | |||
| have been removed from the git repository as well as being added to the | |||
| `.gitignore` file; as such, they will cause merge conflicts when merging | |||
| from *upstream* to *development*. | |||
| #### Praat Modifications | |||
| The `praat-mod` directory in the development zip files provides modifications | |||
| of the `praat` program to support generating spectral data for use with | |||
| espeakedit. This is not available in the subversion releases. | |||
| Instead of adding the `praat-mod` folder to the sources here, to better track | |||
| the changes to the `praat` program the modifications are included in the | |||
| *espeak* branch of the [praat](https://github.com/rhdunn/praat) mirror. This | |||
| mirror currently includes support upto version 5.3.23 of praat. | |||
| ### master | |||
| The *master* branch contains changes to the build system, espeakedit and bug | |||
| fixes detailed in the sections below. In addition, it: | |||
| 1. includes the NVDA voice variants in the `espeak-data/voices/!v` directory; | |||
| 2. supports the Oromo language (`om`, contributed by [gude432](https://github.com/gude432)). | |||
| 3. Optional support for the extended Russian (`ru`), Mandarin Chinese (`zh`) | |||
| and Cantonese Chinese (`zhy`) dictionaries from | |||
| [http://espeak.sourceforge.net/data/](http://espeak.sourceforge.net/data/). | |||
| 4. Use `/i/` instead of `/ɪ/` for `en` transcription of the `/i/` phoneme; | |||
| `en-n` still uses the accent-specific `/ɪ/` transcription. | |||
| #### Build System | |||
| The build system for eSpeak has been changed on the *master* branch to use | |||
| autotools and to support building the phoneme data and language dictionaries | |||
| on POSIX systems. | |||
| 1. Use autotools (`autoconf`, `automake` and `libtool`) to build espeak. | |||
| 2. Use the portaudio header on the build machine, not the one in espeak. This | |||
| avoids the need to link to the correct portaudio header file. | |||
| 3. Detect wxWidgets using `wx-config`. | |||
| 4. Add `configure` options and detection for the `pulse`, `portaudio`, | |||
| `runtime` and `sada` audio API modes. | |||
| 5. Allow `CXXFLAGS` to be overwritten from the environment. This is based | |||
| on the patch for Debian bug #707925 by Jason White. | |||
| 6. *Klatt*, *MBROLA*, *libsonic* and asynchronous command support was made | |||
| optional. This covers: | |||
| * adding an option to the `configure` script; | |||
| * only building the source files that are enabled; | |||
| * removing the guards around the relevant source files; | |||
| * removing the relevant conditional compilation defines from `speech.h`; | |||
| * fixing the sources if needed to build without support for the feature. | |||
| #### espeakedit | |||
| The following changes have been made to `espeakedit` to make it usable from | |||
| the command line, especially for use in the build process: | |||
| 1. Build the intonation data as well as the phoneme data when the `--compile` | |||
| option is passed. | |||
| 2. Don't compile the dictionaries when using the `--compile` command. | |||
| 3. Only call `DrawEnvelopes` if `MAKE_ENVELOPES` is defined. This prevents the | |||
| `phsource/envelopes.png` file being updated every build. | |||
| 4. Don't load the phoneme data before compiling it, as the phoneme data may | |||
| not exist. | |||
| 5. Use the path set by `ESPEAK_DATA_PATH` if that environment variable exists, | |||
| otherwise use the `HOME` environment variable. | |||
| 6. Don't use the paths from the configuration file when running the `--compile` | |||
| command. | |||
| #### Bug Fixes | |||
| The following bugs have been fixed on the *master* branch: | |||
| * all bug fixes have been applied upstream. | |||
| ## Praat Changes | |||
| The bug fixes are sent upstream for inclusion in the upstream version of eSpeak. | |||
| The `praat` program is used to create and edit the spectral data files for | |||
| espeak-ng. The changes to that program to support this are located on the | |||
| *espeak* branch of the [praat](https://github.com/rhdunn/praat) mirror. | |||
| ### android | |||
| ## eSpeak for Android | |||
| The *android* branch contains the sources for the | |||
| [eSpeak for Android](http://reecedunn.co.uk/espeak-for-android) program, based | |||
| on the eyes-free port of eSpeak to Android. | |||
| ### historical | |||
| ## Historical Versions | |||
| The *historical* branch contains the available older releases of eSpeak that | |||
| are not contained in the subversion repository. | |||
| The *historical* branch contains the available older releases of the original | |||
| eSpeak that are not contained in the subversion repository. | |||
| 1.24.02 is the first version of eSpeak to appear in the subversion | |||
| repository, but releases from 1.05 to 1.24 are available at | |||
| @@ -400,9 +194,9 @@ the 1.24.02 source commit. | |||
| ## Bugs | |||
| Report bugs to the [espeak issues](https://github.com/rhdunn/espeak/issues) | |||
| Report bugs to the [espeak-ng issues](https://github.com/espeak-ng/espeak-ng/issues) | |||
| page on GitHub. | |||
| ## License Information | |||
| eSpeak Text-to-Speech is released under the GPL version 3 or later license. | |||
| eSpeak NG Text-to-Speech is released under the [GPL version 3](COPYING) or later license. | |||