【语音识别】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”),会看到如下文件组织:
各文件夹解释如下:
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开发一个简单的示例了。
代码中,主要是用到SpeechSynthesizer的Speak()方法读出一段文字内容。
好,我们先打开VS2010,新建一个Visual
C# Windows项目,项目模板使用“Windows
窗体应用程序”,项目名称及存放路径请根据自己情况设置。如下图所示:
项目建好之后,我们修改一下窗体,增加了一Label和一个Button,如下图所示:
然后双击Button,进入Button的点击事件,开始编写代码。
由于我们需要使用Speech Platform SDK
所提供的库来做开发,所以,这里我们要做的是,先引用相关库进来。
引用库的方式很简单,右击“解决方案资源管理器”下面的项目下的“引用”,在弹出的对话框中,选择“添加引用”选项,如下图所示:
然后会弹出“添加引用”对话框,切换到“浏览”选项卡,在“查找范围”中,找到Speech Platform
SDK安装目录下的“Assembly”目录,然后用鼠标框选“Microsoft.Speech.dll”和“Microsoft.Speech.VoiceXml.dll”,点击“确定”就可以将库添加到项目引用中。
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”,可以自动引用相关命名空间了。
OK,代码就这么简单,然后,按“Ctrl+F5”编译并运行程序,在弹出窗体中,点击Button,就会有声音说出“Hello
World”了。
当然,事实上,事情并不可能这么顺利的。通常你会遇到很多问题,比如:
问题1:No voice installed on the system or none available with the
current security setting.
如下图所示:
出现这种问题的原因有一般有三点:
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了,以上问题自然会得到解决。
解决以上问题之后,重新运行,如果你发现,你点击了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
{