C#实现语音技术

 

 

  电脑朗读(英文)一个很好的触发点,通过它可以实现电子小说阅读、英文听力测试、英文单词学习...

  下面的Speech已对MSTTS作了简单封装。

  1.安装好MSTTS(如果你有装金山词霸,系统就已经安装了),可以在winnt\speech中打到vtxtauto.tlb文件;

  2..Net SDK自带的tlbimp工具把vtxtauto.tlb转换成.dll格式:

  tlbimp vtxtauto.tlb /silent /namespace:mstts /out:mstts.dll
  这时的mstts.dll已成为.net framework运行库的一个类。

  3.编写一个封装vtxtauto的简单类:Speech .

//========================Speech.cs======================
using System

using mstts
//MSTTS名称空间
namespace Bedlang{ //
定义名称空间
public class Speech{
private VTxtAuto VTxtAutoEx

public Speech
(){
VTxtAutoEx = new VTxtAuto
();
VTxtAutoEx.Register
" "," "); //注册COM组件
}
public void Speak
String text{
VTxtAutoEx.Speak
text, 0); //发音
}
}
}
//========================Speech.cs======================

  4.编译Bedlang.Speech

  csc /target:library /out:Bedlang.dll speech.cs /r:mstts.dll
  如果用vs.net开发,可直接生成项目就可以了。

  5.发音实现

//========================demo.cs======================
分别加入Label,TextBox,Button控件各一个到windows Form中,修改它们的属性,源代码如下:
using System

using System.Drawing

using System.Collections

using System.ComponentModel

using System.Windows.Forms

using System.Data

namespace Bedlang
{
///
/// Form1
的摘要说明。
///
public class demo : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1

private System.Windows.Forms.TextBox textBox1

private System.Windows.Forms.Button button1

///
///
必需的设计器变量。
///
private System.ComponentModel.Container components = null

public demo
()
{
//
// Windows
窗体设计器支持所必需的
//
InitializeComponent
();
//
// TODO:
InitializeComponent 调用后添加任何构造函数代码
//
}
///
///
清理所有正在使用的资源。
///
protected override void Dispose
bool disposing
{
if
disposing
{
if
components != null
{
components.Dispose
();
}
}
base.Dispose
disposing );
}
#region Windows Form Designer generated code
///
///
设计器支持所需的方法 - 不要使用代码编辑器修改
///
此方法的内容。
///
private void InitializeComponent
()
{
this.label1 = new System.Windows.Forms.Label
();
this.textBox1 = new System.Windows.Forms.TextBox
();
this.button1 = new System.Windows.Forms.Button
();
this.SuspendLayout
();
//
// label1
//
this.label1.Location = new System.Drawing.Point
24, 16);
this.label1.Name = "label1"

this.label1.Size = new System.Drawing.Size
120, 23);
this.label1.TabIndex = 0

this.label1.Text = "
输入要朗读的文字:"
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point
24, 48);
this.textBox1.Name = "textBox1"

this.textBox1.Size = new System.Drawing.Size
248, 21);
this.textBox1.TabIndex = 1

this.textBox1.Text = ""

//
// button1
//
this.button1.Location = new System.Drawing.Point
112, 112);
this.button1.Name = "button1"

this.button1.TabIndex = 2

this.button1.Text = "
朗读"
this.button1.Click += new System.EventHandler
this.button1_Click);
//
// demo
//
this.AutoScaleBaseSize = new System.Drawing.Size
6, 14);
this.ClientSize = new System.Drawing.Size
292, 197);
this.Controls.AddRange
new System.Windows.Forms.Control[] {
this.button1,
this.textBox1,
this.label1}
);
this.Name = "demo"

this.Text = "demo"

this.ResumeLayout
false);
}
#endregion
///
///
应用程序的主入口点。
///
[STAThread]
static void Main
()
{
Application.Run
new demo());
}
private void button1_Click
object sender, System.EventArgs e
{
Speech s=new Speech
(); //创建一个Speech对象
if
textBox1.Text.Length==0
s.Speak
"Please input letter."); //发音
else
s.Speak
textBox1.Text);
}
}
}
//========================demo.cs======================

  6.编译demo.cs

  csc demo.cs /r:bedlang.dll

  Vs.net环境下可直接编译成exe文件。

  7.运行demo.exe

  输入要要朗读的文字,程序就可朗读了啦.