首页 > 建站教程 > JS、jQ、TS >  Speak.js基于JavaScript将文字转换为语音TTS正文

Speak.js基于JavaScript将文字转换为语音TTS

这个项目将来自C++的eSpeak speech synthesizer采用Emscripten移植到JavaScript。在web上实现Text-to-speech只需要浏览器支持JavaScript. + HTML5。Speak.js 是一个 JavaScript 实现的 Text-to-Speech 的引擎。

介绍
Text-to-Speech (TTS)对于内容识别来说很重要,不仅仅是视力有障碍的用户,对于普通的Web使用者,更加的贴心和便捷,但是在Web上面目前还没有简单的和通用的方法,一种可能的方法是在本演示中所示,它就是Speak.js,新100%纯JavaScript和HTML5技术实现。

编辑一个现有的语音合成引擎,JavaScript是避免写像Espeak从无到有的复杂工程的一个好方法。一次编译,在speak.js espeak的代码不知道它在网上运行:Speak.js采用Emscripten模拟文件系统’假’正常文件读写调用的C++代码espeak(fopen,fread,等)。

这使得正常Espeak数据文件用于(通过一个XHR,或将它们转换为JSON和捆绑他们的脚本文件)。运行编译代码espeak的结果是“写”。与生成的音频文件WAV文件的仿真。Speak.js然后将数据编码使用Base64,并创建一个数据的URL。URL然后装在一个HTML5音频元素,让浏览器处理播放。

请注意,虽然这是一个非常简单的方式来做的事情,它不是最有效的。Speak.js尚未集中的速度,但与一些额外的工作,它可以更快,如果这被证明是一个问题。

为什么你会想要TTS在JavaScript?嗯,有speak.js可以捆绑一个。在你的网站上的JS文件,然后生成的演讲是关于写作一样简单
speak("hello world")
生成的语音将在所有平台上是完全相同的,不像如果你的用户是TTS以他们自己的方式(使用一个操作系统的能力,或一个单独的程序)。Speak.js也可以用一个简单的方法建立的浏览器插件,因为它是纯JavaScript–不需要依赖平台的二进制文件,和插件将在所有的操作系统一样的工作。

一些评论
JavaScript是越来越能干的所有的时间。今天上的JavaScript引擎的开发版本可以运行代码的C++只有3 5倍比C++编译器编译的快慢,和变得更好。因此,扩大网络平台的功能,可以在很多情况下是在JavaScript或通过编写JavaScript做的,而不是添加新的代码到浏览器本身,这必然需要更长的时间–尤其如果你等待所有的浏览器实现特定功能。

而speak.js只使用基于标准的API,由于浏览器的限制不能到处打工呢。就在IE不工作,因为他们不支持类型化数组Safari和Opera和Chrome,因为它不支持WAV数据网址。所以目前speak.js只有正常的Firefox。然而,刚刚提到的丢失的功能并不巨大,希望这些浏览器制造商将很快实现他们。它也可以实现在speak.js解决这些问题(见下一个评论)。

有助于提高speak.js非常受欢迎!重要的一点我们需要的是实现的方法,防止speak.js从它目前不能运行在浏览器中运行的问题。另一个目标是使用speak.js建立浏览器插件。如果你想帮忙联系在GitHub上。

支持多种语言,speak.js espeak也是可以的。您需要包括附加的语言文件。这里是一个实验性的建立可以支持英语和法语之间切换(注意,这是一个不合理的构建,所以它将运行速度较慢)。

使用方法
1、将speakClient.js文件引入到你的Web网页文件中
<script src="speakClient.js"></script>
同时确保你已经将 speakWorker.js 和 speakGenerator.js 文件拷贝到和 speakClient.js 相同的目录中。

2、在你的网页中添加一个ID为audio的DIV元素
<div id="audio"></div>
3、在JavaScript中调用speak()方法将文字转换为语音
speak('hello world!')
可选参数
你也可以指定调用speak()一些选项,通过做
speak('hello world', { option1: value1, option2: value2 .. })
可选的参数列表
amplitude: How loud the voice will be (default: 100)
pitch: The voice pitch (default: 50)
speed: The speed at which to talk (words per minute) (default: 175)
voice: Which voice to use (for a non-default voice, requires you to build speak.js to include the proper data. See Language Support below) (default: en/en-us)
wordgap: Additional gap between words in 10 ms units (default: 0)
noWorker: Do not use a web worker (see below in ‘Architecture’)

例如通过下面的方式使用可选参数
speak('hello world', { pitch: 100 })
说话的声音将会很高。

运行原理
speakClient.js是与你互动的文件。它定义了speak(),并将在Web工作加载speakWorker.js文件。speakWorker环绕speakGenerator.js,所做的实际工作将字符串转换成WAV文件。wav格式的数据返回给speak(),然后发挥它在HTML音频元素。

你也可以使用speak.js没有网络工作者。在这种情况下,你不需要speakWorker.js,但你需要加载speakGenerator.js随着你的HTML页面speakClient.js。如果称为noworker设置为选择对象的真实,将直接调用WAV代码speakGenerator.js不是向工人,同样会做的呼叫转移。

多语言支持
speak.js是可以支持多种语言发音的,要做到这一点,你需要一个定制版的speak.js

绑定正确的语言文件,例如你想使用法语,你需要 fr_dict 和 voices/fr 文件目录,参见 emscripten.sh 和 bundle.py 文件了解更多详细内容。
将这些文件在文件系统的模拟,使用post.js文件,更多信息参见注释
运行emscripten.sh文件构建您的定制版speak.js
然后你需要调用speak()方法和配置声音选项,告诉它要用正确的语言。例如,对于法语来说这应该工作:
speak('boulanger', { voice: 'fr' })
下载地址:Speak.js