在VBS脚本中使用SAPI语音识别?

时间:2014-06-04 01:50:47

标签: vbscript speech-recognition sapi

我发现这个单行示例允许在VBScript中使用Windows SAPI文字转语音功能:

CreateObject("SAPI.SpVoice").Speak("This is a test")

我想知道SAPI语音识别是否可以用同样简单的方式在VBScript程序中使用。当我寻找这些信息时,出现的大量SAPI信息与C ++相关,如Microsoft SAPI站点,或VBS中的文本转语音。我试图找到有关可以在VBScript中使用的SAPI COM对象语音识别部分的文档,但没有找到。

你知道这样的文件是否存在吗? TIA

编辑收到第一个答案后添加了其他请求

虽然下面的第一个答案提供了SAPI COM对象文档的链接,但我想引起您的注意,我的问题是:“我想知道是否可以在VBScript程序中使用SAPI语音识别 IN同样方便“。 SAPI文档是巨大的!我阅读了几页,我完全迷失了...我的目标是只识别几个单词,比如8或10,并且每当其中一个被识别时,屏幕上会显示不同的信息;这就对了! (该程序应该是通过cscript启动的控制台应用程序)。是否有一个简单的 VBS代码示例实现了这样的事情?如果编程此解决方案所需的代码需要有几个页面,那么这不是我要找的答案......

2 个答案:

答案 0 :(得分:0)

是。看看SAPI Automation Overview;它会告诉你所有关于VBScript可用的后期COM接口和对象的信息。

答案 1 :(得分:0)

这是 vbscript 收听 wav文件的有效示例:

scriptRunning = true

Sub rc_Recognition(StreamNumber, StreamPosition, RecognitionType, Result)
  Wscript.Echo "Reco: ", Result.PhraseInfo.GetText, ".", RecognitionType
End Sub

Sub rc_StartStream(StreamNumber, StreamPosition)
  Wscript.Echo "Start: ", StreamNumber, StreamPosition
End Sub

Sub rc_EndStream(StreamNumber, StreamPosition, StreamReleased)
  Wscript.Echo "End: ", StreamNumber, StreamPosition, StreamReleased
  scriptRunning = false
End Sub


outwav = "C:\SOFT\projects\af2t\t.wav"
Const SAFT22kHz16BitMono = 22
Const SSFMOpenForRead = 0

set sapiFStream = CreateObject("SAPI.SpFileStream")
sapiFStream.Format.Type = SAFT16kHz16BitMono
sapiFStream.Open outwav, SSFMOpenForRead


MsgBox "A SpeechLib::ISpRecoContext object will be created"

Const SGDSActive = 1

Set rct = WScript.CreateObject("SAPI.SpInProcRecoContext", "rc_")
Set rgnz = rct.Recognizer
Set rgnz.AudioInputStream = sapiFStream
Set rcGrammar = rct.CreateGrammar
'rcGrammar.DictationLoad
rcGrammar.DictationSetState SGDSActive
i = 0
while scriptRunning and i < 100
  WScript.Sleep(50)
  i = i + 1
wend

MsgBox "A SpeechLib::ISpRecoContext object has been created"

代码的神奇之处在于这一行(“ rc_” prefix 参数允许事件被潜艇捕获)

Set rct = WScript.CreateObject("SAPI.SpInProcRecoContext", "rc_")

我用于测试的t.wav文件中的记录文本是使用SAPI.SpVoice :: Speak和MS-David voice;-)

生成的。

我花了10天的时间弄清楚如何编写此脚本。 Microsoft正在删除有关自动化,COM,旧脚本等的文档。真可惜。

因此,这在听写模式下可以读取wav文件。但是我无法纠正它以使其在实时听写模式下工作(即使用麦克风作为直接输入)。任何帮助表示赞赏。谢谢。

编辑:直接/实时听写模式已解决。如果有兴趣,我会分享vbscript代码。

EDIT2 :WAV中口述的文本示例:Hello world. This is a talk about gear tooth profile using a circle involute. vbscript的控制台输出

C:\SOFT\projects\af2t>cscript r.vbs
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. Tous droits réservés.

Start:  1 0
Reco:  Hello world . 0
Reco:  this is a talk about gear to the profile using a circle invalid . 0
End:  1 195040 -1

C:\SOFT\projects\af2t>