这是一个工作示例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 语音生成的;-)
我花了10天弄清楚how to写这个脚本。 Microsoft 正在删除有关自动化、COM、旧式脚本等的文档。真是遗憾。
因此,这可以在听写模式下读取 wav 文件。但我无法纠正它以使其在实时听写模式下工作(即使用麦克风作为直接输入)。对此任何帮助表示赞赏。谢谢。
EDIT:直接/实时听写模式已解决。如果有兴趣我分享 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>