【发布时间】:2017-08-31 17:51:58
【问题描述】:
我想使用 VB.NET 中的 Microsoft.Speech 命名空间来创建电话应用程序。我需要能够将识别器输入设置为系统上安装的任何音频设备。 Microsoft 有识别器.SetInputToDefaultAudioDevice() 方法,但我需要类似 .SetInputToAudioDeviceID 的东西。如何从系统上安装的设备列表中选择另一个波形音频输入?在 SAPI 中,我会使用 MMSystem 和 SpVoice:
Set MMSysAudioIn1 = New SpMMAudioIn
MMSysAudioIn1.DeviceId = WindowsAudioDeviceID 'set audio input to audio device Id
MMSysAudioIn1.Format.Type = SAFT11kHz8BitMono 'set wave format, change to 8kHz, 16bit mono for other devices
Dim fmt As New SpeechAudioFormatInfo(1000, AudioBitsPerSample.Eight, AudioChannel.Mono)
Recognizer.SetInputToAudioStream(MMSysAudioIN1, fmt)
如何使用 Microsoft.Speech 执行此操作?
更多信息:我想将 Windows 波形驱动程序列表中的任何波形输入设备和我们作为语音识别的输入。具体来说,我可能有一张对话卡,其波形输入由 TAPI 报告为 deviceID 1-4。在 SAPI 中,我可以使用 SpMMAudioIn 类创建一个流并设置与该流关联的设备 ID。你可以看到上面的一些代码。我可以像在 SAPI 中那样通过设备的设备 ID 直接设置 Recognizer1.SetInputToAudioStream 吗?或者我是否必须创建读取字节并使用缓冲区等的代码。我是否必须创建一个 MemoryStream 对象?我在任何地方都找不到任何示例代码。我必须在 .NET 中检查什么才能访问 ISpeechMMSysAudio/spMMAudioIn,以防这样的事情起作用?但希望有一种方法可以使用 MemoryStream 或类似的方法,它接受设备 ID 并让我将该流传递给识别器。
注意 2:我在 VB 项目中添加了“imports Speechlib”,然后尝试运行以下代码。它给出了下面的 cmets 中列出的关于无法将音频流设置为 COM 对象的错误。
Dim sre As New SpeechRecognitionEngine
Dim fmt As New SpeechAudioFormatInfo(8000, AudioBitsPerSample.Sixteen, AudioChannel.Mono)
Dim audiosource As ISpeechMMSysAudio
audiosource = New SpMMAudioIn
audiosource.DeviceId = WindowsAudioDeviceID 'set audio input to audio device Id
' audiosource.Format.Type = SpeechAudioFormatType.SAFT11kHz16BitMono
sre.SetInputToAudioStream(audiosource, fmt) <----- Invalid Cast with COM here
SpeechAudioFormatType 似乎也不支持 8kHz 格式。这只会变得越来越复杂。
【问题讨论】:
标签: vb.net speech-recognition speech sapi audio-device