使用Microsoft SAPI 5.4 Api的wav文件输入时没有输出

时间:2013-03-24 20:44:15

标签: sapi

我正在开展一个项目,我需要使用语音识别将wav文件输入语音(对话)转换为文本。在尝试CMUSPhinx一段时间后,结果很糟糕,我正在考虑使用Microsoft SAPI(Speech API)5.4

我正在从visual studio编写Visual Basic窗口应用程序。这是我的代码片段:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    '   Dim SAPI
    '   SAPI = CreateObject("sapi.spvoice")
    '   SAPI.Speak(TextBox1.Text)

    ' Create new recognizer
    Dim Recognizer As New SpInprocRecognizer

    ' create input file stream
    InputFile = New SpFileStream
    ' Defaults to open for read-only, and DoEvents false
    InputFile.Open(MY_WAVE_AUDIO_FILENAME)

    ' connect wav audio input to speech recognition engine
    Recognizer.AudioInputStream = InputFile

    ' create recognition context
    RecoContext = Recognizer.CreateRecoContext

    '  AddHandler RecoContext.Recognition, AddressOf RecoContext_Recognition

    ' create grammar
    Grammar = RecoContext.CreateGrammar
    ' ... and load dictation
    Grammar.DictationLoad()
    ' start dictating
    Grammar.DictationSetState(SGDSActive)
End Sub

在MY_WAVE_AUDIO_FILENAME中,我已经给出了完整路径的文件名。当我单击按钮运行此代码时,我没有得到任何输出。我使用了以下识别方法:

 Private Sub RecoContext_Recognition(ByVal StreamNumber As Long, ByVal StreamPosition As Object, ByVal RecognitionType As SpeechRecognitionType, ByVal Result As ISpeechRecoResult)
        ' Log/Report recognized phrase/information
        Console.WriteLine("Reached here......")
        TextBox1.Text = "Text should change"
    End Sub

当我调试应用程序时,流程没有到达RecoContext_Recognition方法。输入文件是一个wav文件,每个样本16位,30秒长的会话。

我正在使用此链接中提到的代码: http://msdn.microsoft.com/en-us/library/ee431813(v=vs.85).aspx

我如何检查问题?我曾经读过某个地方,听写需要对语音识别引擎进行培训,如果它在我的情况下也需要,那么我该怎么做呢?同样在链接中提到我们需要指定输入文件的长度才能做到 这个,我也不知道怎么做。需要帮助。

1 个答案:

答案 0 :(得分:1)

示例代码缺少需要解决的几个步骤。

1)Inproc识别器在进行任何识别之前需要bind an engine;

2)inproc识别器在开始处理音频之前需要set active

您还应该考虑为其他事件添加处理程序,特别是SPEI_START_SR_STREAM,SPEI_SOUND_START,SPEI_SOUND_END和SPEI_PHRASE_START,以验证SR引擎是否正在处理音频并且它正在尝试进行一些识别。