6 ms·
Show HN: MeSpeak.js 2.0 – Text-to-Speech in JavaScript
- masswerk 7y agoAuthor here, I'll check this every so often and try to answer any questions…
- Etheryte 7y agoVery cool project and good job on releasing a new version! Libraries like these are huge work. One question: compared to the native text-to-speech on macOS, the synthesized speech sounds, for a lack of a better word, robotic. Is this an inherent property of the approach you used or a result of trying to squeeze something as complex as this into a Javascript library?
- masswerk 7y agoThis is based on eSpeak [1] for Un*x environments, which is based on an application for Acorn/Risc OS. So, yes, it's quite dated. On the other hand, it's lean enough to be run in realtime in Emscripten... However, all the configuration data, including phoneme tables, may be overwritten (but you would have to install eSpeak on your machine first, in order to compile these.) Another approach would be actually porting this to JS (instead of cross-compiling), by this having full access. But I simply do not have the resources for this. (Meanwhile, there's the Web Speech Synthesis API. With this being available on most modern clients, it's probably not worth the effort.) [1] http://espeak.sourceforge.net/ http://espeak.sourceforge.net/
- thebeefytaco 7y agoIs this is 100% client-side and would work offline?
- masswerk 7y agoYes, it's 100% client side, but you have to cache additional files. (A working set consists of the main script, a worker script for the application core and at least one voice definition to be used.) Mind that the core won't run concurrently as a worker on mobile devices, but rather as an instance in the main/UI thread. This is, because mobile devices will mute the playback triggered by a message from a worker, as there is no immediate user interaction. Therefore, longer utterances are likely to block the UI noticeably, while the internal sound file is processed. This is a bit sad, but how things are.
- Cybiote 7y agoI don't have a question, just wanted to say I found the Stereo Spanning example to be a genuine piece of art. The choice of voice and script were truly excellent, having such a robotic voice read the bot's lines was great. Their reading had me chuckling in a few places I would not have if I'd read it simply as text.
- masswerk 7y ago:-)
- kevincennis 7y agoI'm a little surprised to have not seen any mention of the Speech Synthesis API (https://caniuse.com/#feat=speech-synthesis https://caniuse.com/#feat=speech-synthesis). It's supported almost everywhere that the Web Audio API is.
- est31 7y agoFor me, running window.speechSynthesis.getVoices() in the web console of both Firefox and Chromium results in an empty list. Any idea how to populate it? Using ubuntu packages of Firefox/Chromium. Nor does this demo work in any of the two: http://mdn.github.io/web-speech-api/speak-easy-synthesis/ http://mdn.github.io/web-speech-api/speak-easy-synthesis/
- Etheryte 7y agoOn macOS, the returned list contains the built-in operating system voices (about 50) and some additional ones by Google (roughly 20). The spec [1] says the voices made available are entirely up to the browser. Doesn't really answer your question, but at least some additional insight. [1] https://w3c.github.io/speech-api/#dom-speechsynthesis-getvoices https://w3c.github.io/speech-api/#dom-speechsynthesis-getvoi...
- est31 7y agoThanks for confirming that I'm looking at the right list!
- jajag 7y agoIt can take a while for the full voice list to load after speech synthesis is initialized on the page - try calling getVoices() again after a small delay.
- codegladiator 7y agoThis worked. First time I got an empty array. Second time I see an array with 47 items.
- stevefan1999 7y agoWhy did I read Meeseeks.js 2.0 initially...
- asaddhamani 7y agoLook at me!
- dsteinman 7y agoVery nice work, Norbert. I have had an absolute ton of fun playing with your older version and ended up writing wrapper library around your code to add some similar features (webworkers, voices, visualizer) but done in a slightly different way. https://github.com/jaxcore/jaxcore-speak/ https://github.com/jaxcore/jaxcore-speak/
- masswerk 7y agoInteresting! Workers fail for me on iOS (even with an ontouch-preplay/unlocker. Can you confirm Android? If so, I may enable them again for Android based systems.
- dsteinman 7y agoActually I edited my comment because I couldn't remember if it works on IOS. I just double checked and yeah my code fails on IOS also but does work fine (albeit slowly) on Android.
- masswerk 7y agoPlease check this test application: https://www.masswerk.at/mespeak/android-worker-test.html https://www.masswerk.at/mespeak/android-worker-test.html
- tenryuu 7y agoHaha, the article says it might not work on mobile. It completely (and immediately) crashed Firefox Android alongside my Live Wallpaper upon pressing the Read button
- masswerk 7y agoSorry! (Maybe an out of memory issue?)
- matthewtoast 7y agoBeware, this code is licensed under the GPL.