我正在使用VS 2012中允许语音输入的C#WPF应用程序。我使用SpeechRecognitionEngine而不是SpeechRecognizer,因为后者在应用程序和Windows识别器之间存在一些冲突。插入麦克风时效果非常好。但是,一旦没有麦克风(我已经在禁用了任何非有线音频I / O的公共计算机上进行测试),程序就无法正常执行:几乎所有SetInputToDefaultAudioDevice方法之后的代码都没有运行。我已使用以下代码对此进行了测试:
private void NewWindowLoad(object sender, RoutedEventArgs e)
{
SpeechRecognitionEngine sre = new SpeechRecognitionEngine();
// Accept input from the default audio device
sre.SetInputToDefaultAudioDevice();
MessageBox.Show("HELLO");
}
在这种情况下,不会显示任何MessageBox。显然,这段代码被剥夺了基本功能 - 实际上,应用程序实际上是用语音做的事情......但这并不是问题所在。
我没有因运行该方法而遇到任何错误或异常。发生的唯一例外是稍后调用SpeechRecognitionEngine的RecognizeAsync()方法。有没有办法在运行此代码之前检查实际上是否有可用的音频输入设备?或者,还有另一种方法可以做到这一点吗?该应用程序应该能够在任何支持的操作系统上运行,其中音频输入可能可用,也可能不可用。
答案 0 :(得分:1)
waveInGetNumDevs
将返回波形输入设备的数量。如果它为零,则没有音频输入设备。这没有直接的C#绑定,但是P / Invoke非常简单:
[DllImport("winmm.dll")]
public static extern int waveInGetNumDevs();