A JavaScript speech synthesis (text-to-speech) for NodeJS. This library generates speech sounds using only JavaScript, and outputs the generated PCM audio data directly to the speakers. No native libraries are required therefore this library should provide for nearly ubiquitous and future-proof OS support (at least in theory).
For a version of Say which runs in web browsers and with more options and additional information, please refer to:
- Basic example - simple example with one voice
- Full example - advanced example with multiple voices
npm install jaxcore-say-node --mpg123-backend=openal
In any NodeJS project that depends on this module, you will need to use the --mpg123-backend=openal
option for MacOSX support.
npm install --mpg123-backend=openal
const Say = require('jaxcore-say-node');
Say.speaker = require('speaker');
var voice = new Say({
language: 'en',
profile: 'Jack'
});
// say "hello world" through the speakers
voice.say("hello world").then(function() {
// done
});
Jaxcore Say (NodeJS) includes the following predefined ESpeak-based voices:
- Jack
- Pris
- Roy
- Scotty
- Xenu
- Cylon
- Leon
- Rachel
- Zhora
And the following SAM-based voices:
- Sam
- Elf
- Robo
- Granny
Provide the "profile" during instatiation:
var voice = new Say({
language: 'en',
profile: 'Cylon'
});
Or change the profile at any time:
voice.setProfile('Rachel');
The voice profiles include an easy way to modify the speed (faster/slower) and pitch (deeper/higher):
voice.say('hello world', {
fast: true
});
voice.say('hello world', {
slow: true
});
voice.say('hello world', {
high: true
});
voice.say('hello world', {
low: true
});
The language should be defined while instantiating new Say()
, the possible languages are:
- ca = Catalan
- cs = Czech
- de = German
- el = Greek
- en = English
- en-n = English (N)
- en-rp = English (RP)
- en-sc = English (Scottish)
- en-us = English (US)
- en-wm = English (WM)
- eo = Esperanto
- es = Spanish
- es-la = Spanish (Latin America)
- fi = Finnish
- fr = French
- hu = Hungarian
- it = Italian
- kn = Kannada
- la = Latin
- lv = Latvian
- nl = Dutch
- pl = Polish
- pt = Portuguese (Brazil)
- pt-pt = Portuguese, European
- ro = Romanian
- sk = Slovak
- sv = Swedish
- tr = Turkish
- zh = Chinese (Mandarin)
- zh-yue = Chinese (Cantonese)
Set the desired language while instantiating the Say object:
let voice = new Say({
profile: "Cylon",
language: "es"
});
voice.say("hola mi nombre es Cylon");
Or switch languages at any time:
voice.setLanguage("es");
Or set the language as a say()
option:
voice.say("bonjour je m'appelle Cylon", {
language: "fr"
});
Clone this repo, then:
cd examples/basic-example
node start.js
And for multiple voices:
cd examples/basic-example
node start.js
Jaxcore Say (NodeJS) is free software released under the GPL License.
However, IANAL (I am not a lawyer) and due to the bizarre combination of dependencies the license restrictions are ambiguous.
meSpeak (NPM module by Mikola Lysenko): https://github.com/mikolalysenko/mespeak
meSpeak (emscripten port by Norbert Landsteiner): https://www.masswerk.at/mespeak/
eSpeak http://espeak.sourceforge.net/
SAM (reverse-engineered version of SAM by Sebastian Macke) https://github.com/s-macke/SAM
SAM fork by Vidar Hokstad https://github.com/vidarh/SAM
SAM-js port by Christian Schiffler https://github.com/discordier/sam
Jaxcore Say includes modified source code from meSpeak which is GPL and also includes emscripten-compiled eSpeak code which is also GPL. Therefore this derivative work is available under the GPL.
sam-js is used as an external dependency (via NPM) for the SAM based voice profiles. sam-js was reverse engineered and could be classified as abadonware (quoted from https://github.com/s-macke/SAM) :
The software is a reverse-engineered version of a software published more than 34 years ago by "Don't ask Software".
The company no longer exists. Any attempt to contact the original authors failed. Hence S.A.M. can be best described as Abandonware (http://en.wikipedia.org/wiki/Abandonware)
As long this is the case I cannot put my code under any specific open source software license. However the software might be used under the "Fair Use" act (https://en.wikipedia.org/wiki/FAIR_USE_Act) in the USA.
Jaxcore Say will be updated according to any new information that comes to light and it is recommended that any further derivative works/improvement also be independently released under the GPL.