我一直在使用Kinect和语音识别,但是我注意到无法从我的AudioLevel对象更改SpeechRecognitionEngine成员。

我成功地识别了命令,因此我知道kinect可以将声音呈现给我的应用程序。我尝试订阅AudioLevelUpdated事件并直接读取AudioLevel,但是该事件不会触发,并且AudioLevel始终为0。

我需要激活AudioLevel进行任何特殊操作吗?

最佳答案

我记得过去也遇到过同样的问题。在寻找解决方案的过程中,我发现它可能有多种原因,但我还没有真正能够(没有时间)为我的案例指出问题所在。我仍然会列出一些我发现的原因。

  • 它未使用SAPI 5.3,因此将始终返回零,因为SAPI 5.1不支持此功能。
  • 在多个论坛中已经报道它可能是.NET v4运行时问题。
  • AudioLevel基于AudioStatus.dwAudioLevel,由于某种原因它可能返回0。

  • 在MSDN(由IanPeters)上提出的一种变通办法,对我来说是好的,方法是从“可识别的音频”中提取样本音频,使用RecognizedAudio.WriteToWaveStream(),然后取音频绝对值的平均值。这将给您一个估计,可能足以满足您的情况。

    IanPeters的原始帖子位于msdn(SpeechRecognitionEngine.AudioLevel)

    10-08 15:31