aboutsummaryrefslogtreecommitdiff
path: root/demos/espeak/espeak.html
diff options
context:
space:
mode:
Diffstat (limited to 'demos/espeak/espeak.html')
-rw-r--r--demos/espeak/espeak.html95
1 files changed, 0 insertions, 95 deletions
diff --git a/demos/espeak/espeak.html b/demos/espeak/espeak.html
deleted file mode 100644
index 9e23ee18..00000000
--- a/demos/espeak/espeak.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<html>
-<title>Text-to-Speech on the Web</title>
-<head>
- <script>
- // This demo is licensed under the GNU GPL.
-
- var print = console.log;
-
- var Module = {
- arguments: ['-w', 'wav.wav', '-v', 'en/en-us', '--path=/espeak'],
- noInitialRun: true
- };
- </script>
- <script src="espeak.js"></script>
- <script>
- // expects the webserver to run in the parent of espeak-data/
-
- FS.createPath('/', 'espeak/espeak-data', true, false);
- ['phontab', 'phonindex', 'phondata', 'intonations', 'en_dict'].forEach(function(datafile) {
- FS.createLazyFile('/espeak/espeak-data', datafile, 'espeak-data/' + datafile, true, false);
- });
-
- FS.createPath('/', 'espeak/espeak-data/voices/en', true, false);
- FS.createLazyFile('/espeak/espeak-data/voices/en', 'en-us', 'espeak-data/voices/en/en-us', true, false);
-
- FS.root.write = true;
-
- function talk(text) {
- Module.arguments.push(text);
- run();
- Module.arguments.pop();
-
- var wav = FS.root.contents['wav.wav'].contents;
-
- function encode64(data) {
- var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
- var PAD = '=';
- var ret = '';
- var leftchar = 0;
- var leftbits = 0;
- for (var i = 0; i < data.length; i++) {
- leftchar = (leftchar << 8) | data[i];
- leftbits += 8;
- while (leftbits >= 6) {
- var curr = (leftchar >> (leftbits-6)) & 0x3f;
- leftbits -= 6;
- ret += BASE[curr];
- }
- }
- if (leftbits == 2) {
- ret += BASE[(leftchar&3) << 4];
- ret += PAD + PAD;
- } else if (leftbits == 4) {
- ret += BASE[(leftchar&0xf) << 2];
- ret += PAD;
- }
- return ret;
- }
-
- for (var i = 0; i < wav.length; i++)
- wav[i] = unSign(wav[i], 8);
-
- document.getElementById("audio").innerHTML=("<audio id=\"player\" src=\"data:audio/x-wav;base64,"+encode64(wav)+"\">");
- document.getElementById("player").play();
- }
- </script>
-</head>
-<body>
- <h1>Text-To-Speech on the Web</h1>
- <form onsubmit="talk(text.value); return false">
- Text: <input type="text" name="text" size=50 value="Never gonna give, you, up."><input type="submit" value="Go!">
- </form>
- <hr>
- <p>
- This demo is 100% clientside JavaScript. It uses <a href="http://espeak.sourceforge.net/">eSpeak</a>, an open source
- speech synthesizer, which was compiled from C++ to JavaScript using <a href="http://emscripten.org">Emscripten</a>.
- Source code for this demo can be found <a href="espeak_src.tar.bz2">here</a>.
- </p>
- <p>
- Browser requirements:
- <ul>
- <li><b>Typed arrays</b>. The eSpeak code is not portable to the extent that would be necessary to avoid using typed arrays.
- (It should however be possible to rewrite small bits of eSpeak to fix that.)
- This is present in Firefox and Chrome, but not IE, Safari or Opera.</li>
- <li><b>Support for WAV audio in data URIs</b>. eSpeak's simplest form of output is a WAV file, and the easiest way to use
- that is via a data URI. (It should however be possible to extract the raw audio directly by hacking eSpeak.)
- This is present in Firefox, Safari and Opera, but not IE or Chrome.</li>
- </ul>
- So currently this demo will only work in Firefox. Help is welcome regarding the workarounds mentioned above
- that will let it work elsewhere, we would like to develop this demo into a useful project for people to use around the web.
- </p>
- <div id="audio"></div>
-</body>
-</html>
-