//引用组件:Interop.SpeechLib.dll
//导入空间:SpeechLib

//引用组件:Interop.SpeechLib.dll
//导入空间:SpeechLib

//1.SpVoice voice = new SpVoice();

//2.voice.Speak(txt.Text, SpeechVoiceSpeakFlags.SVSFDefault); //同步朗读

//3.voice.Speak(txt.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync); //异步朗读

//voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0);//设置中文语音
//voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(1);设置英文语音

//错误修改:VS2010中 错误无法嵌入互操作类型“SpeechLib.SpVoiceClass”。请改用适用的接口
//解决方案:选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False。

//异常来自 HRESULT:0x8004503异常信息。一般是由Windows Audio服务没有开启造成的,尤其是win2003默认不开Windows Audio服务。
//1)请确认Windows Audio(AudioSrv)服务启动。
//进入cmd 输入net start AudioSrv
//2)声卡驱动安装成功。"

功能强大之处在于TTS能识别XML标记,通过给文本加上XML标记,我们让TTS朗读出更加符合语言阅读习惯的句子。例如:
<volume level="60"></volume> 用于设置文本朗读的音量;
<rate absspeed="1"/>、<rate speed="5"/> 分别用于设置文本朗读的绝对速度和相对速度;
<pitch absmiddle="2"/>、<pitch middle="5"/> 分别用于设置文本朗读的绝对语调和相对语调;
<emph></emph> 在他们之间的句子被视为强调;
<spell></spell> 可以将单词逐个字母的拼写出来;
<silence msec="500"/> 表示停止发声,并保持500微秒;
<context id="date_mdy">02/03/07</context> 可以按要求朗读出日期
<voice required="Language=409"></voice> 用于设置朗读所用的语言,其中409表示使用英语,804表示使用汉语,而411表示日语。

  实例:

protected void speak_Click(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(txt.Text))
{
SpVoice voice = new SpVoice();
StreamReader objReader = new StreamReader(HttpContext.Current.Server.MapPath("~/upload/test.xml"));
string sLine =string.Empty ;
   string sPreview = string.Empty;
while (sLine != null)
{
sLine = objReader.ReadLine();
if (sLine != null)
{
// 这里需要添加Environment.NewLine表示换行
sPreview += sLine + Environment.NewLine;
}
}
SpeakXml(sPreview);
// 关闭文件读取器
objReader.Close();
}
}

  

/// <summary>
/// 读出Xml文件内容
/// </summary>
/// <param name="xml">Xml文件内容</param>
public void SpeakXml(string xml)
{
new SpVoice().Speak(xml, SpeechVoiceSpeakFlags.SVSFIsXML | SpeechVoiceSpeakFlags.SVSFlagsAsync);
}
/// <summary>
/// 保存音频到文件
/// </summary>
/// <param name="xml">要读的Xml格式的内容</param>
/// <param name="fileName">要保存的文件名</param>
public void Save(string xml, string fileName)
{
SpVoice voice = new SpVoice();
SpFileStream stream = new SpFileStream();
stream.Open(HttpContext.Current.Server.MapPath(fileName), SpeechStreamFileMode.SSFMCreateForWrite, false);
voice.AudioOutputStream = stream;
voice.Speak(xml, SpeechVoiceSpeakFlags.SVSFlagsAsync | SpeechVoiceSpeakFlags.SVSFIsXML);
voice.WaitUntilDone(3);
stream.Close();
}
// <summary>
/// 设置中文语音
/// </summary>
public void SetChinaVoice()
{
SpVoice voice = new SpVoice();
voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0);
} /// <summary>
/// 设置英文语音
/// </summary>
public void SetEnglishVoice()
{
SpVoice voice = new SpVoice();
voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(1);
}

  

界面的实现
在打开文件时,可以选择打开文本文件(*.Txt)和XML文件(*.Xml),如果打开的是XML文件,将不对内容作任何修改,并且也不允许调节音量、语速、语调,因为这些都应该在XML文件中写好;如果打开的是文本文件,则在朗读前,会调用AddXmlLangTag方法给文本加上语言标记,调用AddXmlPitchTag方法给文本加上语调标记,同时也允许调节音量、语速、语调。

总结
通过为普通文本内容设置语音XML标记,并调用SpVoice接口的Speak方法,可以实现中英文文本的混合朗读。如果要使朗读的效果更佳,就必须手工为每一个句子设置相应的XML标记,这样可使朗读更接近人性化。

SpeechLib 应用的更多相关文章

  1. SpeechLib 语音播报

    SpeechLib这的dll专门用来播放语音,能够识别英语.简体和繁体.并且可以播放声音文件,支持WAV格式,但不支持MP3.在报警场合下已经够用了. 基本播放语音及文件.支持异步. using Sy ...

  2. 一个简单的网页读字符串 SpeechLib

    //引用组件:Interop.SpeechLib.dll//导入空间:SpeechLib //引用组件:Interop.SpeechLib.dll//导入空间:SpeechLib 前面设置内容引用别人 ...

  3. 用TTS实现文本转语音

    最近被toefl单词虐成狗::>_<:: 想做一个可以自动把单词转成语音的软件,这样就可以在路上戴耳机边走边听啦~ 用微软的TTS语音库可以很容易地实现.早期的TTS要想实现中英文混合朗读 ...

  4. C# 调用百度翻译Api

    这是简单的界面.用的是wpf,winform也可以 具体的操作类 public partial class MainWindow : Window { string url = "" ...

  5. C#播放声音的四种方法 +AxWindowsMediaPlayer的详细用法

    C#播放声音的四种方法 第一种是利用DirectX 1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll和 Microsoft.Directx ...

  6. C#读取文本播放相应语音【转】

    第一种方案: 利用微软text to speech引擎(TTS),读取文本 (1)添加Microsoft Speech Object Library的项目引用 (2)引入using SpeechLib ...

  7. 转自大楚网:微软SAPI:让你的软件能说会道

    [IT168专稿]“没声音,再好的戏也出不来.”这虽然是一句广告,但是也说出了一个道理,我们所开发的软件,特别是一些多媒体软件,要是能够发 出声音,能说会道,将为我们的软件增添不少光彩.同时,我们面临 ...

  8. (转) 使用Speech SDK 5.1文字转音频

    下载地址: http://www.microsoft.com/en-us/download/details.aspx?id=10121 SeppchSDK51.exe 语音合成引擎 SpeechSDK ...

  9. Speech两种使用方法

    COM组件使用speech: public class Speach { private static Speach _Instance = null ; private SpeechLib.SpVo ...

随机推荐

  1. Swift iOS 文件操作:沙盒(SandBox)、程序包(NSBundle)

    1.沙盒机制介绍 iOS 中的沙盒机制(SandBox)是一种安全体系.每个 iOS 应用程序都有一个单独的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒.所有的非代码文件 ...

  2. Android 实现页面跳转并传递参数教程

    首先我们来看一下实现的功能:     第二,我们看一下实现这个功能,总共会接触到哪些文件和代码. 1.实现本功能总共涉及如下6个文件 2.实现本功能,总共涉及如下6个文件中的如下代码: (1) 效果: ...

  3. 怎样在xcode5中使用低版本sdk,解决兼容ios7ui问题

    问题 令人头疼的是,xcode每次升级都会使用最新版本的sdk,而且只有最新版本的sdk,对之前老版本的sdk都没有默认安装,这搞的最近我很头疼, 最近我升级到Xcode5.0版本,编译后运行后,在i ...

  4. Auto Layout on iOS Versions prior to 6.0

    使用XCODE5.0,出现这个小错误... 解决办法: 选中你的XIB或storyboard,如下图 再查看右边属性栏 去掉最下边的Use Autolayout ,完成. 转:http://blog. ...

  5. NSString 和 NSData 转换

    NSString 转换成NSData 对象 NSData* xmlData =[@"testdata" dataUsingEncoding:NSUTF8StringEncoding ...

  6. JavaScript 检查是否是数字

    //---------------------------------------------------------- // 功能:检查是否是数字 // 参数: // str // 返回值: // ...

  7. Java/JSP获得客户端网卡MAC地址的三种方法解析

    java/jsp获得客户端(IE)网卡MAC地址的方法大概有三种. 1.通过命令方式,在客户端执行Ipconfig 等等.(java/jsp) 2.通过ActiveX的方法.(jsp) 3.通过向13 ...

  8. skb的两个函数pskb_copy和skb_copy

    转自:http://blog.csdn.net/farmwang/article/details/54235252 skb的两个函数pskb_copy和skb_copy 前者仅仅是将sk_buff的结 ...

  9. Swift - 从字典(或者Alamofire)直接创建Model文件的工具

    Swift - 从字典(或者Alamofire)直接创建Model文件的工具 效果 1. 常规生成model的方式 2. 通过debug创建model的方式 特性 1. 可以处理JSON格式的字典数据 ...

  10. KOL:Key Opinion Leader

    什么是关键意见领袖 在营销学上,为各厂家宣传的专家或权威被称为“关键意见领袖(Key Opinion Leader),通常被定义为:拥有更多.更准确的产品信息,且为相关群体所接受或信任,并对该群体的购 ...