您的位置:首页 > 编程语言 > C#

使用vs2010-C#开发简单语音系统

2010-11-21 23:39 731 查看
部分转载:http://www.the5fire.net/?p=69

预先知识:

类型库导入程序 (Tlbimp.exe):类型库导入程序将 COM 类型库中的类型定义转换为公共语言运行库程序集中的等效定义。Tlbimp.exe 的输出为二进制文件(程序集),该文件中包含在原始类型库中定义的类型的运行库元数据。可以使用诸如 Ildasm.exe 这样的工具检查此文件。

附上原文的一部分:

-------------------------------------------------------------------------------------

    首先下载sapi.dll文件: http://u.115.com/file/f4d3df0e16 【如果原作者的链接不好用了,联系偶】

    然后要利用vs自带的工具Tlbimp.exe把sapi导出到托管动态链接库中,以便在.net环境中使用。具体操作就是在开始程序中找到vs的菜单,里面有Visual Studio Tools,然后打开Visual Studio 2008 命令提示。 

    输入命令tlbimp [sapi.dll完整目录] /out::DotNetSpeech.dll,忽略警告和错误。 【这个输出的直接到vc的根目录了,自己去找或者在这里指定目标位置】

    完成之后你就就可以使用这个dll文件了。    

    打开vs2008,新建一个c#项目,添加引用,引用那个DotNetSpeech文件。

    在文件上面引入命名空间:using DotNetSpeech; 

    测试代码如下:

    class Program

{

static void Main(string[] args)

{

SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;

SpVoice sp = new SpVoice();

sp.Speak("哈哈,你好,我叫**",spFlags );

Console.Read();

}

}

我在vs2010下实验,上述的console条件下的没有通过,报错:

未处理的异常: System.InvalidCastException: 指定的转换无效。

在 DotNetSpeech.SpVoiceClass.Speak(String Text, SpeechVoiceSpeakFlags Flags)

在 qySpeechInDotNet2.Program.Main(String[] args) 位置 E:/CODE/C#开发文本朗读/

qySpeechInDotNet2/Program.cs:行号 14
但是如果是winform项目类型就可以,who kown why ?

附上原作者winform的demo的源代码,很简单的,就是读txt,然后再读出来。

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

using DotNetSpeech;

 
namespace SpeechDemo2

{

public
partial
class
frmMain : Form

{

SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;

SpVoice sp = new
SpVoice();

private
SpSharedRecoContext ssrc;

private
ISpeechRecoGrammar srg;

 

public frmMain()

{

InitializeComponent();

sp.Speak("你好,很高兴为你服务", spFlags);

}

 

private
void btnExit_Click(object sender, EventArgs e)

{

this.Close();

}

 

private
void btnOpen_Click(object sender, EventArgs e)

{

 
ofdSelect.ShowDialog();

Stream s = ofdSelect.OpenFile();

StreamReader sr1 = new
StreamReader(s, Encoding.GetEncoding("GB2312"));

String str = sr1.ReadToEnd();

rtbContent.Text = str;

sp.Speak("载入完成", spFlags);

}

 

private
void btnRead_Click(object sender, EventArgs e)

{

sp.Speak(rtbContent.Text, spFlags);

sp.Speak("完工了", spFlags);

}

 

private
void btnStop_Click(object sender, EventArgs e)

{

sp.Speak("还没开发", spFlags);

}


 

private
void btnListen_Click(object sender, EventArgs e)

{

}

}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: