语音识别引擎的音频级别不会改变。

3
我一直在使用Kinect和语音识别技术,但我注意到无法从我的SpeechRecognitionEngine对象中更改AudioLevel成员。
我成功地让命令被识别,因此我知道Kinect正在将声音呈现给我的应用程序。我尝试订阅AudioLevelUpdated事件并直接读取AudioLevel,但事件不触发且AudioLevel始终为0。
是否需要采取特殊措施来激活AudioLevel?

你是否为正在使用的用户运行了Kinect校准? - axon
2个回答

1

我记得以前也遇到过同样的问题。在寻找解决方案时,我发现可能有几个原因,但是我还没有真正能够(没有时间)确定我的情况下的问题。我仍然会列出一些我找到的原因。

  • 它没有使用SAPI 5.3,因此始终会返回零,因为SAPI 5.1不支持此功能。
  • 在几个论坛中报告了可能是.NET v4运行时问题。
  • AudioLevel基于AudioStatus.dwAudioLevel,这可能会因某种原因返回0。

MSDN上建议的解决方法(由IanPeters提供)对我来说可行,即从已识别的音频中提取示例音频,使用RecognizedAudio.WriteToWaveStream(),然后取音频的绝对值的平均值。这将为您提供一个估计值,并且可能足以满足您的情况。

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


这基本上是我所做的(手动查找音频级别)。感谢分享你的发现! - joe_coolish

0

我有同样的问题,我通过以下方式解决:

// Configure input to the speech recognizer.
recognizer.SetInputToDefaultAudioDevice();

然后将这行代码放到处理事件的位置

// Add an event handler for the AudioLevelUpdated event.
recognizer.AudioLevelUpdated += new EventHandler<AudioLevelUpdatedEventArgs>(recognizer_AudioLevelUpdated);

然后要打印当前音频级别,请实现recognizer_AudioLevelUpdated方法

void recognizer_AudioLevelUpdated(object sender, AudioLevelUpdatedEventArgs e)
{
    Console.WriteLine("The audio level is now: {0}.", e.AudioLevel);
}

那么音频级别值将在1到100之间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接