.NET 将文本转换成语音

 

  用过金山词霸的都知道金山词霸里有个功能能够将单词按其读音读出来。也许会有人认为它是事先将所有的单词的读音文件存储在数据库里,然后事需要的时候再调用。其实事实上并不是这样,我们有更好的解决办法,MS就专门提供了这种技术。

 

  在计算机中将文本转换成语音的技术叫做语音合成(TTS:Text To Speech)。要使用它的话就需要到MS官网上去下载地址为:http://www.microsoft.com/reader/developers/downloads/tts.mspx

  这个东西不是很大,到于原理还没有去想过,因为现在只是帮想了解的朋友做个最基本的DEMO。

  下下来了后就安装,注意:如果想实现汉字或非英语的阅读就要去下载SpeechSDK51LangPack。

  下面来创建一个TTS程序,首先在VS中创建一个项目,然后添加引用"安装目录\Samples\Csharp\ListBox"中的Interop.SpeechLib.dll程序集,在程序里引用SpeechLib Namespace。

  创建SpVoiceClass类,(SpVoiceClass是我们这里要用到的主要的类),面在这里必要的属性如下:

属性名

类型

说明

Voice

SpObjectToken

大概是用于设置声音的效果

AudioOutput

SpObjectToken

用于选择声卡

Rate

Int

频率,说话的速度

Volume

Int

音量,最大为100

 

  根据SpVoiceClass类中几个必要的属性,我们可以做一个类似下图的简单界面

  具体的实现代码如下:

 

Code
private void button1_Click(object sender, EventArgs e)
{
try
{
voic.Voice
= voic.GetVoices(null, null).Item(comboBox1.SelectedIndex);
voic.AudioOutput
= voic.GetAudioOutputs(null, null).Item(comboBox2.SelectedIndex);
voic.Rate
= trackBar1.Value;
voic.Volume
= trackBar2.Value;
voic.Speak(textBox1.Text, SpeechVoiceSpeakFlags.SVSFDefault);
}
catch
{
;
}
}

  注意:comboBox1.SelectedIndex不为3时只能读英语;如果为3,要读是是英文的话,它就会一个字母一个字母的读出来,如果是汉字则会读汉语(前提是装了话音补丁)

 

  好了,简单的Demo已经完成了,接着去探索吧……

Tag标签: .net,C#,TTS,语音
posted @ 2008-09-27 21:30 齐.net 阅读(4329) 评论(32)  编辑 收藏 网摘 所属分类: .NET FRAMEWORK其它

  回复  引用    
#1楼 2008-09-26 21:34 | 周杰伦 [未注册用户]
沙发沙发!
  回复  引用  查看    
#2楼 2008-09-26 21:36 | 颜昌钢      
不错不错!
  回复  引用  查看    
#3楼 2008-09-26 21:49 | 真见      
不知道能否用在WEB中地
  回复  引用  查看    
#4楼 [楼主]2008-09-26 21:57 | 齐.net      
--引用--------------------------------------------------
真见: 不知道能否用在WEB中地
--------------------------------------------------------
可以,通过调用OCX。
SDK里有例子
  回复  引用  查看    
#5楼 2008-09-26 22:27 | 二手程序员      
@真见

在Web是使用的方法是在服务器生成声音文件或flash文件,送到客户端播放

直接在客户端播放不可行.



另外在.net 3中本身就提供了system.speech 名字空间.
  回复  引用  查看    
#6楼 2008-09-26 23:29 | LanceZhang      
谢谢分享!
  回复  引用  查看    
#7楼 2008-09-26 23:51 | 云端的舞者      
谢谢分享!收藏了
  回复  引用  查看    
#8楼 2008-09-26 23:54 | LanceZhang      
为什么我的安装之后没有找到

\Samples\Csharp\ListBox??

我用的是08系统,安装时还要求我先安装一个叫MSReader 2.1的程序
  回复  引用  查看    
#9楼 2008-09-27 00:40 | LanceZhang      
--引用--------------------------------------------------
LanceZhang: 为什么我的安装之后没有找到

\Samples\Csharp\ListBox??

我用的是08系统,安装时还要求我先安装一个叫MSReader 2.1的程序
--------------------------------------------------------
找到原因了:

需要引用的是:C:\Program Files\Common Files\Microsoft Shared\Speech\sapi.dll

引用之后就生成了Interop.SpeechLib.dll
  回复  引用  查看    
#10楼 2008-09-27 07:57 | @@      
谢谢楼主!
  回复  引用  查看    
#11楼 2008-09-27 08:05 | 赤月之下      
我觉得中国人主要是听中国话,请螺柱详细介绍一下如何读中文,话音补丁哪里下载,我是新手,请多多指教。
  回复  引用  查看    
#12楼 2008-09-27 08:24 | 高海东      
能做单词和句子吗
  回复  引用  查看    
#13楼 [楼主]2008-09-27 08:41 | 齐.net      
  回复  引用  查看    
#14楼 2008-09-27 09:06 | 二叉树      
谢谢分享
  回复  引用  查看    
#15楼 2008-09-27 09:45 | Doho      
看来语音合成挺吸引人的哦
  回复  引用    
#16楼 2008-09-27 09:56 | bogey [未注册用户]
中文的话,最好先分词,不然读出来惨不忍听。。。
  回复  引用  查看    
#17楼 2008-09-27 10:00 | PerfectDesign      
07年的时候已经有个朋友做过这个成熟的项目了
  回复  引用  查看    
#18楼 2008-09-27 11:45 | 子逸      
@中文的话,最好先分词,不然读出来惨不忍听。。。
可以看看这篇文章
探究 Windows Vista 中新的语音识别与合成 API
http://www.microsoft.com/china/MSDN/library/Windev/WindowsVista/speechinWindowsVista.mspx?mfr=true
  回复  引用    
#20楼 2008-09-27 13:49 | kevin未登录 [未注册用户]
靠,很多年前就已经出来的了。

现在怎么首页的文章质量越来越差了,什么都发。

这种文章要发也发到新手区阿。。。。。。
  回复  引用  查看    
#21楼 2008-09-27 14:59 | 代码乱了      
不错,TTS虽然是很多年前就有了,不过很少看到.net文章中介绍使用的
  回复  引用  查看    
#22楼 2008-09-27 16:03 | QFSoft      
可以把这个声音另存为一个文件吗?
  回复  引用  查看    
#23楼 [楼主]2008-09-27 16:23 | 齐.net      
@QFSoft
可以,SpVoiceClass类中有方法
  回复  引用  查看    
#24楼 2008-09-27 17:10 | 陈晨      
不错,收藏了,备用
  回复  引用    
#25楼 2008-09-27 20:32 | hehehe [未注册用户]
C++年代我就用过这个东西。
这个东西需要和AT&T之类更好的TTS配合才好用,不然就是玩具。
  回复  引用    
#26楼 2008-09-27 21:51 | JoeLee [未注册用户]
微软很早以前就做了语音引擎的.
MSDN里就有相关内容,你找找就知道了.
.金山就是用了微软的语音引擎做的(听同事说的)
  回复  引用  查看    
#27楼 2008-09-27 22:45 | 二手程序员      
@齐.net
用JS不会跨平台吧.
  回复  引用  查看    
#28楼 2008-09-27 23:32 | 曲滨*銘龘鶽      
这东西我以前发过
  回复  引用    
#29楼 2008-10-03 11:38 | hehehe [未注册用户]
不知道的人真多。
其实现实中用TTS用的最多的是大家平时都要用的一个东西——IVR中的电信冲值系统。现在TTS的实用基本是C++下的Call Center系统,.NET的应用很少。
  回复  引用    
#30楼 2008-11-11 11:00 | www99 [未注册用户]
看了一下,那个中文发音太郁闷了,要是能成为标准的普通话就好了,我听上去像是小孩子在读书一样,只有二个音调
  回复  引用  查看    
#31楼 2008-11-13 09:27 | 逖靖寒      
好玩:)
  回复  引用  查看    
#32楼 2008-11-28 22:45 | 华仔2008      
收藏了

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-10-05 21:55 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:


相关搜索:
.net C# TTS 语音

相关链接: