|
|
@@ -8,7 +8,7 @@ allows client-side text-to-speech synthesis in any browser |
|
|
|
supporting Web workers and the Web Audio API. |
|
|
|
|
|
|
|
* Version: 1.49.0 |
|
|
|
* Date: 2016-10-27 |
|
|
|
* Date: 2016-11-01 |
|
|
|
* License: the GNU General Public License, Version 3 (GPLv3) |
|
|
|
* Size: 3.0 MB (including all the voices) |
|
|
|
|
|
|
@@ -17,7 +17,7 @@ supporting Web workers and the Web Audio API. |
|
|
|
|
|
|
|
For an online demo, visit [this page](https://www.readbeyond.it/espeakng/). |
|
|
|
|
|
|
|
If you prefer a local demo, open the file `demo.html` in your browser. |
|
|
|
If you prefer a local demo, open the file [`demo.html`](demo.html) in your browser. |
|
|
|
(Depending on your browser, you might need to serve it via a Web server. |
|
|
|
A simple way consists in calling `$ python -m SimpleHTTPServer 8000` |
|
|
|
and pointing your browser to `http://localhost:8000/demo.html`) |
|
|
@@ -26,18 +26,20 @@ and pointing your browser to `http://localhost:8000/demo.html`) |
|
|
|
## Usage |
|
|
|
|
|
|
|
1. Include `js/espeakng.js` in your HTML file: |
|
|
|
|
|
|
|
|
|
|
|
```html |
|
|
|
<script type="text/javascript" src="js/espeakng.js"></script> |
|
|
|
``` |
|
|
|
|
|
|
|
2. Create a new `eSpeakNG` instance with the path of the worker (e.g., `espeakng.worker.js`) as the first argument. |
|
|
|
2. Create a new `eSpeakNG` instance with the path of the worker |
|
|
|
(e.g., `js/espeakng.worker.js`) as the first argument. |
|
|
|
You can supply a callback function that will be called once the worker is ready: |
|
|
|
|
|
|
|
```js |
|
|
|
<script> |
|
|
|
var espeakng = new eSpeakNG('js/espeakng.worker.js', function(){ |
|
|
|
// now you can use espeakng |
|
|
|
var tts = new eSpeakNG('js/espeakng.worker.js', function(){ |
|
|
|
// now tts is initialized and |
|
|
|
// you can call tts.function(...) |
|
|
|
... |
|
|
|
}); |
|
|
|
</script> |
|
|
@@ -51,7 +53,7 @@ and pointing your browser to `http://localhost:8000/demo.html`) |
|
|
|
* `set_voice.apply(espeakng, voice)`: set the voice for synthesizing speech, `voice` must be the code string for the desired voice (e.g., `en`, `en-us`, `it`, etc.) |
|
|
|
* `synthesize(text, cb(samples, events))`: synthesize the given string `text` and call the callback function `cb` when done, passing the generated audio samples (`samples`) and events (`events`) |
|
|
|
|
|
|
|
See the file `demo.html` for details. |
|
|
|
See the file [`demo.html`](demo.html) for details. |
|
|
|
|
|
|
|
|
|
|
|
## Download |
|
|
@@ -63,34 +65,43 @@ TODO: add the compiled JS files to a public free CDN, and list the URL here. |
|
|
|
|
|
|
|
## Building |
|
|
|
|
|
|
|
1. Make sure you have `emscripten` [installed and activated](http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html). |
|
|
|
1. Make sure you have `emscripten` |
|
|
|
[installed and activated](http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html), |
|
|
|
and configured in your shell. |
|
|
|
|
|
|
|
2. Clone the repo and enter the `espeak-ng` directory: |
|
|
|
2. Clone the repository, enter the `espeak-ng` directory, and initialize it: |
|
|
|
|
|
|
|
```bash |
|
|
|
$ git clone https://github.com/espeak-ng/espeak-ng |
|
|
|
$ cd espeak-ng |
|
|
|
$ ./autogen.sh |
|
|
|
``` |
|
|
|
|
|
|
|
3. Compile `espeak-ng`: |
|
|
|
|
|
|
|
```bash |
|
|
|
$ ./autogen.sh |
|
|
|
$ ./configure --prefix=/usr --without-async --without-mbrola --without-sonic |
|
|
|
$ make |
|
|
|
``` |
|
|
|
|
|
|
|
4. Recompile `espeak-ng` with `emconfigure` and `emmake`: |
|
|
|
Instead, if you just want a subset of languages of your choice, |
|
|
|
run `make XX` for each of them, where `XX` is the language code. |
|
|
|
For example: |
|
|
|
|
|
|
|
```bash |
|
|
|
$ emconfigure ./configure --prefix=/usr --without-async --without-mbrola --without-sonic |
|
|
|
$ emmake make |
|
|
|
$ # build English only |
|
|
|
$ make en |
|
|
|
$ |
|
|
|
$ # build English, Italian, and German |
|
|
|
$ make en && make it && make de |
|
|
|
``` |
|
|
|
|
|
|
|
Note: the `emmake make` command currently exits |
|
|
|
with the error `recipe for target 'phsource/phonemes.stamp' failed`, |
|
|
|
but you can safely ignore it. |
|
|
|
(TODO: fix this issue.) |
|
|
|
4. Recompile the `espeak-ng` library with `emconfigure` and `emmake`: |
|
|
|
|
|
|
|
```bash |
|
|
|
$ emconfigure ./configure --prefix=/usr --without-async --without-mbrola --without-sonic |
|
|
|
$ emmake make src/libespeak-ng.la |
|
|
|
``` |
|
|
|
|
|
|
|
5. Enter the `emscripten` directory and compile the JS worker with `emmake`: |
|
|
|
|
|
|
@@ -100,28 +111,29 @@ TODO: add the compiled JS files to a public free CDN, and list the URL here. |
|
|
|
``` |
|
|
|
|
|
|
|
6. The `js/` directory should contain the output JS files: |
|
|
|
|
|
|
|
|
|
|
|
* `espeakng.js`, |
|
|
|
* `espeakng.worker.js`, and |
|
|
|
* `espeakng.worker.data`. |
|
|
|
|
|
|
|
### Notes |
|
|
|
|
|
|
|
* If you want to build only a single voice, for example the English one, |
|
|
|
run `$ make en` instead of `$ make` at step 3. |
|
|
|
You can also build a subset of all the available voices, |
|
|
|
by running (say) `$ make en && make it && make fr && make es`. |
|
|
|
Note that `list_voices()` will still list all available voices, |
|
|
|
but if you try using one that has not been compiled, |
|
|
|
* Even if you build only a subset of languages, |
|
|
|
the `list_voices()` function will still list all the available voices. |
|
|
|
However, if you try using language that has not been built, |
|
|
|
you will get a runtime error. |
|
|
|
(TODO: fix this issue.) |
|
|
|
* The `-O3` optimization flag is passed to `emscripten` by default, |
|
|
|
achieving a considerable reduction of the size of the generated JS worker. |
|
|
|
If you want to omit it, for example for debug purposes, |
|
|
|
just `$ export EM_DEBUG=1` before calling `emmake make` in step 5. |
|
|
|
just export the `EM_DEBUG` environment variable with value `1` |
|
|
|
(i.e., `$ export EM_DEBUG=1`) before step 3. |
|
|
|
* To remove intermediate files compiled by emscripten, |
|
|
|
keeping only the JS worker files, run `$ emmake clean-intermediate`. |
|
|
|
* To remove all the files compiled by emscripten, run `$ emmake clean`. |
|
|
|
run `$ emmake clean-intermediate`. |
|
|
|
This command will keep the output JS files, if any. |
|
|
|
* To remove all the files compiled by emscripten, |
|
|
|
including the output JS files, |
|
|
|
run `$ emmake clean`. |
|
|
|
|
|
|
|
|
|
|
|
## Credits |