网站建设资讯

NEWS

网站建设资讯

语音到文本vb.net,语音到文本转换

vb.net怎么做中文语音识别程序

首先添加一个系统的语音COM组件的引用microsoft speech object library然后在程序中声明一个语音类dim RC As SpeechLib.SpSharedRecoContext这个类有一些事件,如果你要处理它的一些事件,可以用withevent来声明然后在窗体LOAD事件或你需要的地方先创建一个实例RC = New SpeechLib.SpSharedRecoContext当一个RC被实例化后,系统就会运行语音识别程序.前提是你的系统已经正确安装这个功能.一般默认就已经安装好的.其次提醒一下,WIN7的语音识别比XP的好N倍.从阅读到侦听都好很多.然后就可以在你需要阅读的地方使用RC.Voice.Speak("hello 我", 11)11那里是一些枚举,用来标识系统用前台还是后台或其他方式来阅读文字,简单的来说就是阅读的时候不会卡住你的程序.你可以选其他的枚举来试试作用.以上为阅读部分.如果需要程序听你说话,则需要声明一个侦听类dim RG As SpeechLib.ISpeechRecoGrammar在初始化时将之与上面的RC建立关系,此时则必须要用withevent来声明上面的RC,因为涉及电脑听到你的语音后,会触发一个事件,并将听到的内容传递到该事件.其次,要让系统听到的解析为命令,就必须准备一个XML结构的文件来保存那些固定的命令.如果电脑在XML文件中找不到那些固定命令或同时不属于系统命令,电脑将会将其解释为听写.RG = RC.CreateGrammar '(0)

你所需要的网站建设服务,我们均能行业靠前的水平为你提供.标准是产品质量的保证,主要从事成都网站设计、网站建设企业网站建设、成都手机网站制作、网页设计、成都品牌网站建设、网页制作、做网站、建网站。创新互联拥有实力坚强的技术研发团队及素养的视觉设计专才。

RG.CmdLoadFromFile("听到.xml", SpeechLib.SpeechLoadOption.SLODynamic)

RG.CmdSetRuleIdState(0, SpeechLib.SpeechRuleState.SGDSActive)然后写一个过程来处理听到的事件Private Sub 听到命令(ByVal StreamNumber As Integer, ByVal StreamPosition As Object, ByVal RecognitionType As SpeechLib.SpeechRecognitionType, ByVal 话语 As SpeechLib.ISpeechRecoResult) Handles RC.Recognition RC.Voice.Speak("我听到了" 话语.PhraseInfo.GetText, 11)End Sub以上为侦听部分.下面列一个XML的例文?xml version="1.0" encoding="gb2312"?

GRAMMAR LANGID="804"

RULE NAME="命令" TOPLEVEL="ACTIVE"

L

P打开播放器

P上我的QQ

P关闭你自己 /L

/RULE

/GRAMMAR要让系统正确地侦听到你说的话,前提你必须运行语音识别程序并让其激活到"正在聆听"状态.并且你必须有一个能正常使用的话筒而且保证话筒已经打开.(废话-_-|||)以上就是用VB.NET语音识别的最基本的一些操作.希望对你有帮助.更深入的内容有兴趣的话可以和我一起研究.

.net怎样把语音转换成文本呀,求指教,非常感谢

微软研究院的那帮牛人们不是吃白食的,现在这门高深的技术已经不再那么遥不可及了。

如果是.NET Framework 4.0的环境,请翻阅一下关于这个命名空间的MSDN文档

System.Speech.Recognition

不过先要搞清楚一些基本概念才能开始动手编程。开始语音识别前要先初始化声音输入设备,设定“语言”(地区代码),设定“语法”(识别规则),等等。

Windows 7 预装了中文语音识别引擎

一下是示例代码:

using System;

using System.Speech.Recognition;

namespace SpeechRecognitionApp

{

class Program

{

static void Main(string[] args)

{

// Create an in-process speech recognizer for the en-US locale.

using (

SpeechRecognitionEngine recognizer =

new SpeechRecognitionEngine(

new System.Globalization.CultureInfo("en-US")))

{

// Create and load a dictation grammar.

recognizer.LoadGrammar(new DictationGrammar());

// Add a handler for the speech recognized event.

recognizer.SpeechRecognized +=

new EventHandlerSpeechRecognizedEventArgs(recognizer_SpeechRecognized);

// Configure input to the speech recognizer.

recognizer.SetInputToDefaultAudioDevice();

// Start asynchronous, continuous speech recognition.

recognizer.RecognizeAsync(RecognizeMode.Multiple);

// Keep the console window open.

while (true)

{

Console.ReadLine();

}

}

}

// Handle the SpeechRecognized event.

static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)

{

Console.WriteLine("Recognized text: " + e.Result.Text);

}

}

}

如果是.NET4, Windows 7之前的环境,可以安装Microsoft Speech SDK 5.1

vb.net文字转语音

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim s As Object

s = CreateObject("sapi.spvoice")

s.speak("speak")

End Sub

VB如何实现传输语音和文件,我想做个聊天工具

传输语音和文件都可以通过Mswinsock 实现,只是速度方面我没有试过,我正巧最近也弄了点Mswinsock 相关的东西,代码发给你看看,希望有帮助

传送文件对于网络编程来说是基本的功能,比如远程控制软件。在编制一个软件时,我从网上下了很多传文件的程序,这些程序提供的传文件功能根本就不能用。传文本还可以,传二进制文件根本就不行。因此,作为一个基本的功能模块,有必要单独介绍一下。

首先,在VB中要传送字符串,你可以这样写:

Dim strData As String

strData = "Test"

Winsock1.SendData strData

但是如果你传送的二进制文件,你还能用String变量来存放吗?从理论上分析是不行的,我也做了实验,确实是不行的。文件虽然可以传,但是接受的文件和发送的不一样,原因可能是二进制文件里可以有任何"字符",但是不是所有的字符都可以放在String变量里。

除了String类型的变量,VB中其他类型的变量都只有几个字节长,难道一次只能发几个字节吗?那样岂不是要累死机器了!其实,情况没有那么悲观,我们完全可以使用数组来解决这个问题,就是使用byte数组。把要传送的文件都读到数组里,然后发送出去。程序如下:

FileName 为要传送的文件名,WinS为发送文件的WinSock控件。这是一个发送端的程序。

Public Sub SendFile(FileName As String, WinS As Winsock)

Dim FreeF As Integer ''空闲的文件号

Dim LenFile As Long ''文件的长度

Dim bytData() As Byte ''存放数据的数组

FreeF = FreeFile ''获得空闲的文件号

Open FileName For Binary As #FreeFile ''打开文件

DoEvents

LenFile = LOF(FreeFile) ''获得文件长度

ReDim bytData(1 To LenFile) ''根据文件长度重新定义数组大小

Get #FreeFile, , bytData ''把文件读入到数组里

Close #FreeFile ''关闭文件

WinS.SendData bytData ''发送数据

End Sub

接受端的程序如下:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim bytData() As Byte

Dim f

f = FreeFile

Open strFileName For Binary As #f

ReDim bytData(1 To bytesTotal)

Winsock1.GetData bytData

Put #f, i, bytData

i = i + bytesTotal ''保证每次写都是在文件的末尾, i是个全局变量

Close #f

End Sub

这里有两个需要注意的地方,ReDim Preserve bytData(1 To LenFile),下标是从1开始的,如果你写成ReDim bytData( LenFile),下标就是从0开始了,数组就有LenFile+1长了。LenFile = LOF(FreeFile)中的LOF是获得文件长度的函数,是VB里带的,我见过很多例子用API,或者循环的读直到末尾来获取文件长度,这样都是很麻烦的,使用LOF函数就可以了。

这样的程序,即可以传送文本文件,也可以传送二进制文件。但是你有没有发现这个程序的问题呢?如果我要传送一个50M的文件呢?系统可以为bytData分配50M的内存空间吗?

于是笔者拿一个50M的文件做实验吧,接收到的文件和原来的文件不一样,比原来的大。问题出在那呢?

首先,根据文件大小重新定义bytData数组的大小本身就有问题,系统是不可能无限制的给数组分配空间的,即使可以,也会造成系统响应变慢。在传50M文件的时候,系统就跟死机了一样。那么怎么解决这个问题呢,一个自然的想法就是把数据分段传送。程序如下:

发送程序, iPos是个全局变量,初始值为0。这个变量保存着当前数据的位置。Const iMax = 65535是每个数据块的大小。

Dim FreeF As Integer ''空闲的文件号

Dim LenFile As Long ''文件的长度

Dim bytData() As Byte ''存放数据的数组

FreeF = FreeFile ''获得空闲的文件号

Open FileName For Binary As #FreeF ''打开文件

DoEvents

LenFile = LOF(FreeF) ''获得文件长度

If LenFile = iMax Then ''如果要发送的文件小于数据块大小,直接发送

ReDim bytData(1 To LenFile) ''根据文件长度重新定义数组大小

Get #FreeF, , bytData ''把文件读入到数组里

Close #FreeF ''关闭文件

WinS.SendData bytData ''发送数据

Exit Sub

End If

''文件大于数据块大小,进行分块发送

Do Until (iPos = (LenFile - iMax)) ''发送整块数据的循环

ReDim bytData(1 To iMax)

Get #FreeF, iPos + 1, bytData

WinS.SendData bytData

iPos = iPos + iMax ''移动iPos,使它指向下来要读的数据

Loop

''这里要注意的是,必须检查文件有没有剩下的数据,如果文件大小正好等于数据块大小的

'' 整数倍,那么就没有剩下的数据了

ReDim bytData(1 To LenFile - iPos) ''发送剩下的不够一个数据块的数据

Get #FreeF, iPos + 1, bytData

WinS.SendData bytData

Close #FreeF

下面是接收端的程序:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim bytData() As Byte

Dim lLenFile As Long

Dim f

f = FreeFile

Open strFileName For Binary As #f ''strFileName是文件名

lLenFile = LOF(f)

ReDim bytData(1 To bytesTotal)

Winsock1.GetData bytData

If lLenFile = 0 Then ''lLenFile=0表示是第一次打开文件,这里有个问题,就是''如果如果该文件存在的话,就会出错,应该在打开前检查文件是否存在。(这里我省略了)

Put #f, 1, bytData

Else

Put #f, lLenFile + 1, bytData

End If

Close #f

End Sub

怎样在VB中,实现向文本框的语音输入

我的理解是这样的:

我们的目的:向文本框输入语音文字

操作过程就得分两步:

一:获取语音文字进行存储

二:将语音文字写入文本框

这样实施起来你就有了明确的操作过程。

语音识别这方面的技术我现在没有,你可以在网上查找相应的技术或者购买相应的技术,只要将语音转换成了文字,相信再写入文本框你就可以很简单的操作了

怎么把语音转换成文本?

你好,怎么把语音转换成文本?可以这样做哦,简单又高效。

具体步骤

第一步,在操作界面左侧两个功能栏目选择“语音转文字”。

第二步,将录音文件拖拽至虚线框处或点击“添加文件”在弹出窗口将其添加进来。

第三步,在闪电文字语音转换软件界面右方“设置”选项根据录音文件设置“识别语种”以及“输出文档格式”,这里根据录音文件设置为“识别中文”以及“TXT”文档格式。

第四步,点击“输出目录”中的“自定义”,打开文件夹设置储存位置。

第五步,点击“开始转换”按钮,待转换进度为100%时即可。


名称栏目:语音到文本vb.net,语音到文本转换
文章分享:http://cdweb.net/article/hshchp.html