espeakng.js
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.
- Version: 1.49.0
- Date: 2016-10-27
- License: the GNU General Public License, Version 3 (GPLv3)
- Size: 3.0 MB (including all the voices)
Demo
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)
Usage
-
Include
js/espeakng.jsin your HTML file:<script type="text/javascript" src="js/espeakng.js"></script> -
Create a new
eSpeakNGinstance 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
eSpeakNGobject:list_voices(cb(voices)): obtain the list of available voices, passing it (voices) to the callback functioncbset_rate(value): set the rate of the synthesized speech,valuemust be an integer in[80..450], default175set_pitch(value): set the pitch of the synthesized speech,valuemust be an integer in[0..99], default50set_voice.apply(espeakng, voice): set the voice for synthesizing speech,voicemust be the code string for the desired voice (e.g.,en,en-us,it, etc.)synthesize(text, cb(samples, events)): synthesize the given stringtextand call the callback functioncbwhen done, passing the generated audio samples (samples) and events (events)
See the file
demo.htmlfor details.
Download
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.
Building
-
Make sure you have
emscripteninstalled and activated. -
Clone the repo and enter the
espeak-ngdirectory:$ 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-ngwithemconfigureandemmake:$ emconfigure ./configure --prefix=/usr --without-async --without-mbrola --without-sonic $ emmake makeNote: the
emmake makecommand currently exits with the errorrecipe for target 'phsource/phonemes.stamp' failed, but you can safely ignore it. (TODO: fix this issue.) -
Enter the
emscriptendirectory and compile the JS worker withemmake:$ cd emscripten $ emmake make -
The
js/directory should contain the output JS files:espeakng.js,espeakng.worker.js, andespeakng.worker.data.
Notes
- If you want to build only a single voice, for example the English one,
run
$ make eninstead of$ makeat 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 thatlist_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.) - The
-O3optimization flag is passed toemscriptenby 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=1before callingemmake makein step 5. - 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.
Credits
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.