新浪博客

【语音识别】Microsoft Speech Platform 自学笔记3 动手编写第一个程序

2012-12-16 09:47阅读:
笔 记 人:又吹风
时  间:2012/12/16
主要内容:动手编写第一个程序
  
  上次我们已经把开发包SDK、运行时Runtime以及各种语言包Language Packs 都安装好了,接下来的是,就是开始学习如何使用这些工具来开发软件了。

1、自学资料介绍

在这里,我就简单介绍一下SDK中的帮助文档的使用吧。安装后Microsoft Speech Platform SDK之后,打开安装目录(默认为:“C:\Program Files (x86)\Microsoft Speech Platform SDK”),会看到如下文件组织:

【语音识别】Microsoft <wbr>Speech <wbr>Platform <wbr>自学笔记3 <wbr>动手编写第一个程序


各文件夹解释如下:
l Assembly 用于.Net开发的引用包
l Docs SDK帮助文件
l Include C/C++包含文件,主要用于C/C++开发
l Lib 静态库文件,主要用于C/C++开发
l Redist 运行时Runtime
l Samples 示例
l Tools 工具包,如语法检查、语法分析等工具
打开帮助文件“Docs/ MicrosoftSpeechPlatformSDK.chm”,就可以看到SDK使用教程了。这里只有英文版。


2、使用C#开发一个Hello World程序

我用的是Visual Studio 2010做为开发平台,当然,你也可以使用Visual Studio 2008或其它的,不过,要注意的是,由于Speech Platform依赖Microsoft .NET Framework 4.0,所以,在开发之前,确保你的电脑安装了它,需要说明一点的是,我的电脑是64位的。
打开SDK帮助文档,左边选中“Speech Synthesis”,然后选中“Speaking the Contents of a String”,此时,右部分就会显示如何使用Speech Platform开发一个简单的示例了。

【语音识别】Microsoft <wbr>Speech <wbr>Platform <wbr>自学笔记3 <wbr>动手编写第一个程序

代码中,主要是用到SpeechSynthesizerSpeak()方法读出一段文字内容。

好,我们先打开VS2010,新建一个Visual C# Windows项目,项目模板使用“Windows 窗体应用程序”,项目名称及存放路径请根据自己情况设置。如下图所示:


【语音识别】Microsoft <wbr>Speech <wbr>Platform <wbr>自学笔记3 <wbr>动手编写第一个程序
项目建好之后,我们修改一下窗体,增加了一Label和一个Button,如下图所示:

【语音识别】Microsoft <wbr>Speech <wbr>Platform <wbr>自学笔记3 <wbr>动手编写第一个程序

然后双击Button,进入Button的点击事件,开始编写代码。

由于我们需要使用Speech Platform SDK 所提供的库来做开发,所以,这里我们要做的是,先引用相关库进来。

引用库的方式很简单,右击“解决方案资源管理器”下面的项目下的“引用”,在弹出的对话框中,选择“添加引用”选项,如下图所示:

【语音识别】Microsoft <wbr>Speech <wbr>Platform <wbr>自学笔记3 <wbr>动手编写第一个程序
然后会弹出“添加引用”对话框,切换到“浏览”选项卡,在“查找范围”中,找到Speech Platform SDK安装目录下的“Assembly”目录,然后用鼠标框选“Microsoft.Speech.dll”和“Microsoft.Speech.VoiceXml.dll”,点击“确定”就可以将库添加到项目引用中。

【语音识别】Microsoft <wbr>Speech <wbr>Platform <wbr>自学笔记3 <wbr>动手编写第一个程序
Microsoft.Speech是基本库,必须的引用;而“Microsoft.Speech.VoiceXml.dll”,前面也说过了,Microsoft Speech Platform支持业界VoiceXml声音标记语言,所以,这个动态库,主要是让程序支持VoiceXml声音标记语言。

导入完成之后,就可以写代码了,在Button的点击事件中,输入如下代码:

private void button1_Click(object sender, EventArgs e)
{
SpeechSynthesizer s = new SpeechSynthesizer();
s.Speak('Hello World!');
}
编写完之后,SpeechSynthesizer字符会有红色波浪线,此时,将鼠标移动到该字符上,右击,“解析”,“using Microsoft.Speech.Synthesis”,可以自动引用相关命名空间了。

【语音识别】Microsoft <wbr>Speech <wbr>Platform <wbr>自学笔记3 <wbr>动手编写第一个程序
OK,代码就这么简单,然后,按“Ctrl+F5”编译并运行程序,在弹出窗体中,点击Button,就会有声音说出“Hello World”了。


当然,事实上,事情并不可能这么顺利的。通常你会遇到很多问题,比如:

问题1:No voice installed on the system or none available with the current security setting.
如下图所示:

【语音识别】Microsoft <wbr>Speech <wbr>Platform <wbr>自学笔记3 <wbr>动手编写第一个程序
出现这种问题的原因有一般有三点:
1、 你的电脑没有安装语言包,或者语言包的版本与SDK、Runtime版本不一致。
2、 安全设置有问题,通常在Web开发的时候,IIS用户权限不足造成的。
3、 你安装了x64的Speech Platform,而编译的程序却是x86的。

解决方法:
1、 检查你的语言包,确保安装了语音识别包SR和文本转语音包TTS,另外,还需要检查你的语言包版本号与SDK、Runtime版本一致;
2、 给IIS设置足够的权限;
3、 设置项目编译属性,在你的项目中,点击菜单栏的“项目”,然后“TestMSP属性”(根据你的项目名不同),在弹出的窗口中,点击左边的“生成”,然后右边“配置”中选择“Debug”,在“常规”-“目标平台”中,选择“x64”,重新在“配置”中选择“Release”,在“常规”-“目标平台”中,选择“x64”,然后保存一下。这样一来,无论是调试模式还是发布模式,都是x64了,以上问题自然会得到解决。

【语音识别】Microsoft <wbr>Speech <wbr>Platform <wbr>自学笔记3 <wbr>动手编写第一个程序
解决以上问题之后,重新运行,如果你发现,你点击了Button之后,没有发出声音,请不要惊讶。我们慢慢来将它解决掉!

问题2:没有提示错误,也没有发出任何声音!
原因:主要是因为“Microsoft.Speech.Synthesis”和“System.Speech.Synthesis”发生冲突所导致的,为什么这么说?我们打开“控制面板”-“语音识别”,点击左边的“文本到语音转换”,在弹出的对话框中,我们可以看到,在“语音选择”中,只看到两项“Microsoft Anna”和“Microsoft Lili”TTS,而我们安装了的“MSSpeech_TTS_en-US_Helen”、“MSSpeech_TTS_zh-CN_HuiHui”、“MSSpeech_TTS_zh-HK_HunYee”都没有出现在其中,这就说明了,系统默认是使用了“System.Speech.Synthesis”作为TTS,而我们在程序中,使用了“Microsoft.Speech.Synthesis”作为TTS,因为两者冲突,这种导致了程序中没有发出任何声音。

解决方法:解决的思路是这样的,我们先把TTS发出的声音保存的文本或内容中,然后再使用播放器进行播放,具体代码如下:


public partial class Form1 : Form
{

我的更多文章

下载客户端阅读体验更佳

APP专享