eGuideDog
free software for the blind

WebSpeech

(2023年6月20日更新)

WebSpeech是一个面向Web开发人员的JavaScript库,调用该库可以很容易地写出支持语音合成和语音识别的网页。

1. 下面是语音合成功能的演示:

语音: 速度(-50..100):

2. 下面是使用该库合成语音的一个简单例子:

<html>
  <head>
    <meta http-equiv="Content-Type"
      content="text/html; charset=utf-8" />
    <script type='text/javascript'
      src='/WebSpeech/WebSpeech.js'></script>
  </head>
  <body>
    <button onclick="WebSpeech.speak('听到声音了吗?');">合成语音</button>
    <script type='text/javascript'>
      WebSpeech.server = 'http://120.24.87.124/cgi-bin/ekho2.pl';
    </script>
  </body>
</html>

下面还有一些利用WebSpeech编写的例子:

3. 下面是语音识别功能的演示:

4. 为什么利用WebSpeech可以编写发声的网页呢?

这是因为WebSpeech后面还有一个语音服务器,该服务器向公众提供有限用量的免费语音服务。您也可以自己部署一台语音服务器,具体方法可参考How to setup eSpeak TTS server for WebSpeech。如果您觉得这项服务很有用,很希望您能向我们提供捐款,这对WebSpeech和电子导盲犬项目的持续发展很重要。

我们向商业用途网站(及政府网站)提供不限用量的语音服务支持,费用为每个网站2000元/年。

我们同时提供语音服务器的配置和维护服务。1台语音服务器的配置和1个月的维护,附上所有源代码及部署文档(按照文档可在相同版本Linux服务器上自行再部署),费用为2000元人民币。

该服务需要用户事先准备一台可从互联网访问的Linux服务器。如果使用该语音的网站通过https方式访问,该语音服务器同样需要通过https方式访问,而不能通过IP访问,否则会被浏览器拦截。

Coqui和Ekho语音可在局域网离线使用,而百度和讯飞语音需要联网使用并可能产生额外费用。Coqui是深度学习语音,响应时间会稍长一些,对硬件要求也稍高一些。

需要以上服务的可联系Cameron Wong(hgneng at gmail.com)。

5. 下面是WebSpeech的API:

WebSpeech.server = '您的语音服务接口地址';

WebSpeech.speak('text to speak');
WebSpeech.pause();
WebSpeech.resume();
WebSpeech.stop();

// 朗读当前网页
WebSpeech.speakHtml();
WebSpeech.pauseHtml();
WebSpeech.stopHtml();

// 当WebSpeech初始化完成后运行
WebSpeech.ready(function () { ... });

// 当speak的文本完成后运行
WebSpeech.onfinish = function () { ... };

// 设置语音:BaiduMandarinFemale、EkhoMandarin,EkhoCantonese(粤语)等
WebSpeech.setVoice('BaiduMandarinFemale');

WebSpeech.getSpeedDelta();
WebSpeech.setSpeedDelta(value); // -50 <= value <= 100
WebSpeech.getPitchDelta();
WebSpeech.setPitchDelta(value); // -100 <= value <= 100
WebSpeech.getVolumeDelta();
WebSpeech.setVolumeDelta(value); // -100 <= value <= 100

// 会激活浏览器“另存为”的功能
WebSpeech.saveMp3('text to save to MP3 format file');
WebSpeech.saveOgg('text to save to OGG format file');

// 获取汉字的音标,当数据到达时会调用参数中传入的函数,
// symbols就是我们需要的数据,是以空格为分隔符的字符串
WebSpeech.getPhonSymbols('text', function (success, symbols) { ... });

// 开始识别语音
WebSpeech.srStart();

// 停止识别语音
WebSpeech.srStop();

// 当识别出语音后运行
WebSpeech.srSpeechRecognized = function(result) { ... };

版权许可: GPLv2+