`
yangzb
  • 浏览: 3470254 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

.Net平台下开发中文语音应用程序

阅读更多

作者:陈本峰  来源:微软中国社区  发布时间:2006-03-01 20:29:54

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

目录:
1. SAPI.51 SDK浅析以及安装
2. 导入COM对象到.Net
3. 用C#开发中文TTS应用程序示例
4. 结论
5. 参考文献

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。

图(2)
打开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)
分享到:
评论

相关推荐

    C#.Net平台下开发中文语音应用程序

    C#.Net平台下开发中文语音应用程序

    Net平台下开发中文语音应用程序

    Net平台下开发中文语音应用程序,从网上Copy来的,和大家共享。是一个Microsoft SSDK实例开发帮助。

    .net 语音应用程序

    语音是人类最自然的...然而,在新发布的.net speech SDK里面并没有对中文语音进行支持,目前支持中文的Speech SDK最高版本为Windows平台下的SAPI 5.1(),本文介绍如何在.net平台下利用SAPI5.1开发中文语音应用程序。

    Net平台下开发英文语音应用程序[源文件]

    Net平台下开发英文语音应用程序[源文件]Net平台下开发英文语音应用程序[源文件]Net平台下开发英文语音应用程序[源文件]Net平台下开发英文语音应用程序[源文件]Net平台下开发英文语音应用程序[源文件]

    C# 平台下开发中文语音应用程序 (源代码)

    非常好~~你输入英文就会读~~

    C#语音代码

    语音是人类最自然的...然而,在新发布的.net speech SDK里面并没有对中文语音进行支持,目前支持中文的Speech SDK最高版本为Windows平台下的SAPI 5.1(),本文介绍如何在.net平台下利用SAPI5.1开发中文语音应用程序。

    VB.net 可视电话程序

    VB.net实现的可视电话. 可以实现语音和视频的多人聊天和会议,效果不错 用在通讯程序开发、实时通讯、即时通讯和应用程序辅助等方面非常有效. 特共享

    .Net.Framework3.5开发技术详解[中文][PDF][VOL1]

    3.4 WPF应用程序的类型 44 3.4.1 传统类型的视窗程序 44 3.5 创建第一个WPF程序 49 第4章 WPF程序的布局 59 4.1 布局的基础知识 59 4.2 StackPanel容器 61 4.3 DockPanel容器 65 4.4 Grid容器 67 4.4.1 表格的高度和...

    .Net.Framework3.5开发技术详解

    3.4 WPF应用程序的类型 3.4.1 传统类型的视窗程序 3.5 创建第一个WPF程序 第4章 WPF程序的布局 4.1 布局的基础知识 4.2 StackPanel容器 4.3 DockPanel容器 4.4 Grid容器 4.4.1 表格的高度和宽度 4.4.2 ColumnSpan和...

    ASP.net从入门到精通 光盘源码

    DVD语音视频教学光盘,18小时教学视频录像,全程语音讲解本书实例源程序、相关素材,本书特色:基础知识-核心技术-高级应用-项目实战,124个应用实例,8个典型应用,1个项目安全内容极为详尽,实例典型丰富。

    WindowsCE.NET应用程序开发:我有哪些选择?

    摘要:比较MicrosoftWindowsCE.NET应用程序开发人员目前可以使用的三种开发选择(即Win32、MFC和Microsoft.NETFramework精简版)的优势。学习如何使用每个运行时创建类似于MFCScribble示例的应用程序。前不久,我们...

    .Net.Framework3.5开发技术详解[中文][共二卷][PDF][VOL2]

    3.4 WPF应用程序的类型 44 3.4.1 传统类型的视窗程序 44 3.5 创建第一个WPF程序 49 第4章 WPF程序的布局 59 4.1 布局的基础知识 59 4.2 StackPanel容器 61 4.3 DockPanel容器 65 4.4 Grid容器 67 4.4.1 表格的高度和...

    Synthesizer.net:Windows的文本到语音免费应用程序

    使用您的操作系统的本机声音Synthesizer.net使用语音应用程序编程接口或SAPI,这是Microsoft开发的官方API。 Synthesizer.net与以下操作系统兼容: Microsoft Windows 10 Microsoft Windows 8 Microsoft Windows 7 ...

    ASP.NET从入门到精通.pdfpart1

    本书从初学者角度出发,以通俗易懂的语言,丰富多彩的实例,详细介绍了使用ASP.NET进行Web程序开发应该掌握的各方面技术。全书共分29章,包括ASP.NET 2.0开发入门、C#语言基础、ASP.NET的内置对象、ASP.NET 2.0 Web...

    ASP.NET从入门到精通part2

    本书从初学者角度出发,以通俗易懂的语言,丰富多彩的实例,详细介绍了使用ASP.NET进行Web程序开发应该掌握的各方面技术。全书共分29章,包括ASP.NET 2.0开发入门、C#语言基础、ASP.NET的内置对象、ASP.NET 2.0 Web...

    21天学通ASP.NET 光盘part02

    本书一共分为四篇,第一篇主要讲解了ASP.NE的入门基础知识,内容包括搭建ASP.NET开发环境、C#语言基础、面向对象的程序设计、ASP.NET内置对象、ASP.NET页面语法、ASP.NET站点设计和常用服务器控件。第二篇重点分析了...

    21天学通ASP.NET 光盘

    本书一共分为四篇,第一篇主要讲解了ASP.NE的入门基础知识,内容包括搭建ASP.NET开发环境、C#语言基础、面向对象的程序设计、ASP.NET内置对象、ASP.NET页面语法、ASP.NET站点设计和常用服务器控件。第二篇重点分析了...

Global site tag (gtag.js) - Google Analytics