惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - ㊣鑫哥

jQuery插件---获取URL参数. 利用反射,泛型,扩展方法快速获取表单值到实体类 [原创]jQuery PreviewImg 上传预览插件 js操作frameset frame 对象 关于“Internet Explorer无法打开站点,已终止操作” JavaScript 面向对象程序设计(下)——继承与多态 JavaScript 面向对象程序设计(上)——封装[转] JS类 检测上传图片的大小,宽,高及格式检查 .net 2.0 制作 柱状图 [转]AJAX之旅 由prototype_1.3.1进入javascript殿堂-类的初探 asp.net如何获取客户端网卡mac地址 [转]不可多得的Javascript(AJAX)开发工具 - Aptana 探究 Singleton 设计模式(构建分布式应用程序) [转]在自定义Server Control中捆绑JS文件 Step by Step IE下JavaScript迁移到FireFox下的工作笔记[转] Asp.net组件开发(资料贴) 有关于JSON的一些资料 这样的UpdatePanel控件要怎么做 [转]30岁前男人应该做的16件事
.Net平台下开发中文语音应用程序[转]
㊣鑫哥 · 2007-08-31 · via 博客园 - ㊣鑫哥

http://www.lionsky.net/MyWebSite/Article/list.aspx?id=437
程序下载:点击下载
源文件:点击下载

语音是人类最自然的交互方式,也是现阶段软件用户界面发展的最高目标。微软公司一直积极推动语音技术的发展,并且公布了语音开发平台Speech SDK帮助开发人员实现语音应用。
随着.net技术深入人心,越来越多的程序员开始转到.net平台上进行开发。然而,在新发布的.net speech SDK里面并没有对中文语音进行支持,目前支持中文的Speech SDK最高版本为Windows平台下的SAPI 5.1(),本文介绍如何在.net平台下利用SAPI5.1开发中文语音应用程序。

1. SAPI.51 SDK浅析以及安装
SAPI SDK是微软公司免费提供的语音应用开发工具包,这个SDK中包含了语音应用设计接口(SAPI)、微软的连续语音识别引擎(MCSR)以及微软的语音合成(TTS)引擎等等。目前的5.1版本一共可以支持3种语言的识别 (英语,汉语和日语)以及2种语言的合成(英语和汉语)。SAPI中还包括对于低层控制和高度适应性的直接语音管理、训练向导、事件、语法编译、资源、语音识别(SR)管理以及TTS管理等强大的设计接口。其结构如图(1):


图(1)
语音引擎则通过DDI层(设备驱动接口)和SAPI(SpeechAPI)进行交互,应用程序通过API层和SAPI通信。通过使用这些API,用户可以快速开发在语音识别或语音合成方面应用程序。
SAPI5.1 SDK可以从微软网站下载:http://www.microsoft.com/speech/download/sdk51/ 需要安装程序的有Speech SDK 5.1(68M)和5.1 Language Pack (81.5M)。


2. 导入COM对象到.Net
SAPI5.1的基于Windows平台的,通过COM接口进行调用。在.Net平台下要应用SAPI5.1,我们可以利用.Net Framework自带的强大工具TlbImp.exe来把SAPI SDK的COM对象导入到.Net中。TlbImp.exe产生一个管制的包装类,管理客户端可以使用它。包装类管理实际的COM对象的参考数。当包装类当作收集的垃圾时,包装类释放掉它包装的COM对象。当然,你也可以在VS.NET环境中通过从项目参考对话框选择COM对象,实现COM对象的导入,这个过程也是通过TlbImp.exe来完成的。
下面演示如何导入SAPI的COM对象:
D:\Program Files\Common Files\Microsoft Shared\Speech>Tlbimp sapi.dll /out: DotNetSpeech.dll

在安转SDK以后,可以在D:\Program Files\Common Files\Microsoft Shared\Speech\目录下面找到SAPI.dll,这里面定义了SAPI的COM对象,用Tlbimp.exe工具将该dll转换成.net平台下的Assembly---DotNetSpeech.dll,转换的过程会提示不少的警告(warning),但这部影响我们的开发,可以忽略。最后,我们可以用ildasm查看DotnetSpeech.dll里面的对象。

3. 用C#开发中文TTS应用程序示例
下面通过一个实例来介绍如何利用C# 进行开发语音应用程序,开发环境为:
操作系统: Windows 2000 中文版+ SP3
.Net Framework: 1.0.3705(英文版)
Visual Studio.Net 7.0.9466(英文版)
首先,新建一个C#的Windows Application工程SpeechApp,在开发环境的右边的解决方案管理器(Solution Explorer)中,添加DotNetSpeech对象库。右键点击"Reference"(参考),选择"Add Reference"(添加参考),在弹出的文件选择对话框中找到刚才生成的DotNetSpeech.dll。

打开Form1.cs代码文件,在代码开头添加名字空间(注意大小写)。
using DotNetSpeech;
这样就实现了SAPI SDK的导入,下面我们就可以开始编写应用代码了。本示例演示如何把文本通过喇叭朗读出来以及把文本转化成语音信号(Wave声音文件),程序界面如图(3):

//朗读
private void buttonSynthesis_Click(object sender, System.EventArgs e)
{
 try
{
  SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
  SpVoice Voice = new SpVoice(); 
  Voice.Speak(this.textBoxText.Text, SpFlags);
 }
 catch(Exception er)
 {
MessageBox.Show("An Error Occured!","SpeechApp", MessageBoxButtons.OK, MessageBoxIcon.Error);
 }
}
//生成声音文件(Wav)
private void buttonTTStoWave_Click(object sender, System.EventArgs e)
{
 try
{
  SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
  SpVoice Voice = new SpVoice(); 
  SaveFileDialog sfd = new SaveFileDialog();
  sfd.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";
  sfd.Title = "Save to a wave file";
  sfd.FilterIndex = 2;
  sfd.RestoreDirectory = true;
  if (sfd.ShowDialog()== DialogResult.OK)
  {
   SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite;
   SpFileStream SpFileStream = new SpFileStream();
   SpFileStream.Open(sfd.FileName, SpFileMode, false);
   Voice.AudioOutputStream = SpFileStream;
   Voice.Speak(txtSpeakText.Text, SpFlags);
   Voice.WaitUntilDone(Timeout.Infinite);
       SpFileStream.Close();
  }
 }
 catch(Exception er)
 {
MessageBox.Show("An Error Occured!","SpeechApp", MessageBoxButtons.OK, MessageBoxIcon.Error);
 }
}

接下来,还要去控制面板配置Speech SDK引擎当前所处理语言。打开"控制面板",打开"语音"配置项目,可以看到在这里我们可以指定当前可以对何种语言进行识别或者合成,还可以配置相关的硬件设备以及控制语速。(如图4)

在"文字-语音转换"的"语音选择"组合框中选择简体中文(Microsoft Simplified Chinese)。这样就可以合成汉语文字了。
回到VS.Net,F5编译运行刚才的应用程序,在文本框里输入汉字,戴上耳机,点击"朗读"按钮,开始体验新一代的智能人机界面吧,呵呵:)

4. 结论
微软为语音人机界面提供了强大的平台,.net环境更使这种开发方便快捷。赶快去下载SAPI5.1 SDK,让你的应用程序"绘声绘色",体现Nature UI,Let’s GO!!!

5. 参考文献
[1] Speech SDK自带的说明文档(SAPI.chm)
[2] MSDN (msdn.microsoft.com)