济宁果壳科技专业软件开发团队,提供全方位的互联网服务!
座机:15563775221 手机:15563775221(微信)

热门标签

  1. 首页
  2. 果壳学院
  3. 技术顾问
  4. 语音合成 (Speech Synthesis),语音识别(Speech Recognition) | 果壳科技
语音合成 (Speech Synthesis),语音识别(Speech Recognition) | 果壳科技

语音合成 (Speech Synthesis),语音识别(Speech Recognition) | 果壳科技

语音合成 ,Speech Synthesis,语音识别,Speech Recognition,JS,前端应用,Windows窗体应用,济宁果壳科技。Windows 语音使用

济宁果壳科技

2017-07-22 16:46:01

0

6387

一、首先说一下语音识别和语音合成技术实现;Windows系统有自己的语音,基于C#的开发,也已经将语音封装到System.Speech程序集中,有兴趣的朋友可以自己试试;

二、我们讲述一下c#实现语音阅读以及文本转语音文件,是基于c#的一个类库SpeechSynthesizer 实现的,使用该类必须要添加引用using System.Speech.Synthesis;直接是无法添加引用的,先对项目进行添加System.Speech引用;

下面的代码使用窗体应用程序简单实现的,当然程序集里还封装的好多的功能,大家可以自行探讨;在web应用是不行的,应该可以封装成ActiveX 控件,供浏览器调用吧,这个还没实现;下面会说用JS实现web语音技术。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Speech.Synthesis;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Speech_WinForm
{
public partial class SpeakVoice : Form
{
public SpeakVoice()
{
InitializeComponent();
}

private void text_content_TextChanged(object sender, EventArgs e)
{

}

private void btn_speak_Click(object sender, EventArgs e)
{
var content = this.text_content.Text;
SpeechSynthesizer synth = new SpeechSynthesizer();
synth.Speak(content);
}

private void SpeakVoice_Load(object sender, EventArgs e)
{

}
}
}

上面的代码也可以用控制台应用程序去写,在这里只给大家一个引子,感兴趣的同志可以去百度一下吧,

三、HTML5语音Web Speech

HTML5中和Web Speech相关的API实际上有两类,一类是“语音识别(Speech Recognition)”,另外一个就是“语音合成(Speech Synthesis)”,这两个名词听上去很高大上,实际上指的分别是“语音转文字”,和“文字变语音”。 而下面要介绍的就是这里的“语音合成-文字变语音”。为什么称为“合成”呢?比方说你发音“你好,世界!” 实际上是把“你”、“好”、“世”、“界”这4个字的读音给合并在一起,因此,称为“语音合成”。 “语音识别”和“语音合成”看上去像是正反两方面,实际上,至少从兼容性来看,两者并无法直接对等。 “语音识别(Speech Recognition)”目前的就Chrome浏览器和Opera浏览器默认支持,并且需要webkit私有前缀:

1、先说一下 语音识别(Speech Recognition)

使用的基本套路如下: 创建SpeechRecognition的新实例。

由于到目前为止,浏览器还没有广泛支持,所以需要webKit的前缀:

var newRecognition = webkitSpeechRecognition(); 设置是持续听还是听到声音之后就关闭接收。通过设置continuous属性值实现。一般聊天沟通使用false属性值,如果是写文章写公众号之类的则可以设置为true,

如下示意: newRecognition.continuous = true;

控制语音识别的开启和停止,可以使用start()和stop()方法:

// 开启 newRecognition.start();

// 停止 newRecognition.stop(); 对识别到的结果进行处理,可以使用一些事件方法,比方说onresult: newRecognition.onresult = function(event) { console.log(event); } event是个对象,我家里电脑不知道什么原因,无法成功返回识别内容,显示网络错误,可能因为墙的缘故:

2、语音合成Speech Synthesis


先从最简单的例子说起,如果想让浏览器读出“你好,世界!”的声音,可以下面的JS代码:


var utterThis = new window.SpeechSynthesisUtterance('你好,世界!');

window.speechSynthesis.speak(utterThis);


没错,只需要这么一点代码就足够了,大家可以在自己浏览器的控制台里面运行上面两行代码,看看有没有读出声音。


上面代码出现了两个长长的对象,SpeechSynthesisUtterance和speechSynthesis,就是语音合成Speech Synthesis API的核心。


首先是SpeechSynthesisUtterance对象,主要用来构建语音合成实例,例如上面代码中的实例对象utterThis。我们可以直接在构建的时候就把要读的文字内容写进去:


var utterThis = new window.SpeechSynthesisUtterance('你好,世界!');


又或者是使用实例对象的一些属性,包括:


text – 要合成的文字内容,字符串。

lang – 使用的语言,字符串, 例如:"zh-cn"

voiceURI – 指定希望使用的声音和服务,字符串。

volume – 声音的音量,区间范围是0到1,默认是1。

rate – 语速,数值,默认值是1,范围是0.1到10,表示语速的倍数,例如2表示正常语速的两倍。

pitch – 表示说话的音高,数值,范围从0(最小)到2(最大)。默认值为1。


因此上面的代码也可以写作:


var utterThis = new window.SpeechSynthesisUtterance();

utterThis.text = '你好,世界!';


不仅如此,该实例对象还暴露了一些方法:


onstart – 语音合成开始时候的回调。

onpause – 语音合成暂停时候的回调。

onresume – 语音合成重新开始时候的回调。

onend – 语音合成结束时候的回调。


接下来是speechSynthesis对象,主要作用是触发行为,例如读,停,还原等:


speak() – 只能接收SpeechSynthesisUtterance作为唯一的参数,作用是读合成的话语。

stop() – 立即终止合成过程。

pause() – 暂停合成过程。

resume() – 重新开始合成过程。

getVoices – 此方法不接受任何参数,用来返回浏览器支持的语音包列表,是个数组,例如,在我的电脑下,Firefox浏览器返回的语言包是两个:

虽然数量很多,是有种给人中看不中用的感觉,为什么这么说呢!在我的chrome浏览器下,不知道为什么,不会读任何声音,但是同样的demo见面,公司的电脑就可以,我后来仔细查了一下,有可能(20%可能性)是我家里的电脑win7版本是阉割版,没有安装或配置TTS引擎。


手机Safari浏览器也不会读。



三、语音合成Speech Synthesis API有什么用


对于盲人或弱视用户,往往会借助一些辅助设备或者软件访问我们的网页,其原理是通过触摸或定位某些元素发出声音,来让用户感知内容。


有了语音合成Speech Synthesis API,对于这类用户,以及开发人员自己,都会带来一定的便利性。首先对于视觉有障碍的用户,他们就不需要再安装其他软件或购买其他设备,就可以无障碍地访问我们的产品。对于开发人员自己,我们的无障碍建设可以变得更加灵活,不一定要百分百契合ARIA无障碍规范(可参见我之前文章“WAI-ARIA无障碍网页应用属性完全展示”),因为我们可以直接让浏览器合成我想要的语音内容,例如,VoiceOver在对一些标签读取的时候,总会附带一句“标志性内容”,就算对于我这样专业从业者,这个词也是有点生涩难懂的,我们其实可以把这个语音合成交给自己,使用更通俗易懂的词反馈给用户,我想体验上应该是更好的。



定制首选 果壳科技 咨询热线:0537-2551991

关闭咨询框