SpeechRecognitionEngine.AudioLevel не изменяется - PullRequest
3 голосов
/ 23 февраля 2012

Я работаю с Kinect и Voice Recognition и замечаю, что не могу заставить члена AudioLevel измениться с моего объекта SpeechRecognitionEngine.

Я успешно смог распознать команды, поэтому я знаю, что kinect представляет мое приложение со звуком. Я пытался подписаться на событие AudioLevelUpdated и читать AudioLevel напрямую, но событие не срабатывает, и AudioLevel всегда равно 0.

Что-нибудь особенное, что мне нужно сделать, чтобы активировать AudioLevel?

Ответы [ 2 ]

1 голос
/ 25 марта 2012

Я помню, что у меня была такая же проблема в прошлом. В поисках решения я обнаружил, что у него может быть несколько причин, но я пока не смог (не успел) точно определить проблему для моего случая. Я все еще перечислю некоторые причины, которые я нашел.

  • Он не использует SAPI 5.3 и поэтому всегда будет возвращать ноль, потому что SAPI 5.1 не поддерживает это.
  • На нескольких форумах сообщалось, что это может быть проблема во время выполнения .NET v4.
  • Уровень AudioLevel основан на AudioStatus.dwAudioLevel, который может возвращать 0 по причине.

Обходной путь, который был предложен для MSDN (IanPeters) и работал для меня нормально, заключался в извлечении образца звука из Распознанного аудио, использования RecognizedAudio.WriteToWaveStream() и последующем получении среднего абсолютного значения звука. Это даст вам оценку и может быть достаточно для вашей ситуации.

Оригинальный пост IanPeters находится на MSDN ( SpeechRecognitionEngine.AudioLevel )

0 голосов
/ 02 февраля 2013

У меня та же проблема, и я решаю ее

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

затем поместите эту строку для обработки события

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

затем, чтобы напечатать текущий уровень звука, реализуйте метод распознал

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

, тогда значения уровня звука будут между 1 ... 100.

...