|
|
9 years ago | |
|---|---|---|
| .. | ||
| js | 9 years ago | |
| Makefile | 9 years ago | |
| README.md | 9 years ago | |
| demo.html | 9 years ago | |
| espeakng_glue.cpp | 9 years ago | |
| espeakng_glue.idl | 9 years ago | |
| post.js | 9 years ago | |
| pre.js | 9 years ago | |
This port of eSpeak-ng to Javascript via emscripten allows client-side text-to-speech synthesis in any browser supporting Web workers and the Web Audio API.
For an online demo, visit this page.
If you prefer a local demo, open the file 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)
Include js/espeakng.js in your HTML file:
<script type="text/javascript" src="js/espeakng.js"></script>
Create a new eSpeakNG instance with the path of the worker (e.g., espeakng.worker.js) as the first argument.
You can supply a callback function that will be called once the worker is ready:
<script>
var espeakng = new eSpeakNG('js/espeakng.worker.js', function(){
// now you can use espeakng
...
});
</script>
Functions exposed by the eSpeakNG object:
list_voices(cb(voices)): obtain the list of available voices, passing it (voices) to the callback function cbset_rate(value): set the rate of the synthesized speech, value must be an integer in [80..450], default 175set_pitch(value): set the pitch of the synthesized speech, value must be an integer in [0..99], default 50set_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.
You can download pre-built JS files from the Releases page.
TODO: add the compiled JS files to a public free CDN, and list the URL here.
Make sure you have emscripten installed and activated.
Clone the repo and enter the espeak-ng directory:
$ git clone https://github.com/espeak-ng/espeak-ng
$ cd espeak-ng
Compile espeak-ng:
$ ./autogen.sh
$ ./configure --prefix=/usr --without-async --without-mbrola --without-sonic
$ make
Recompile espeak-ng with emconfigure and emmake:
$ emconfigure ./configure --prefix=/usr --without-async --without-mbrola --without-sonic
$ emmake make
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.)
Enter the emscripten directory and compile the JS worker with emmake:
$ cd emscripten
$ emmake make
The js/ directory should contain the output JS files:
espeakng.js,espeakng.worker.js, andespeakng.worker.data.$ 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,
you will get a runtime error.
(TODO: fix this issue.)-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.$ emmake clean-intermediate.$ emmake clean.Eitan Isaacson wrote the original glue code for compiling eSpeak to Javascript via emscripten.
Alberto Pettarin adapted Eitan’s files to work with eSpeak-ng and wrote this README file.