语音识别不起作用

时间:2014-06-19 09:53:15

标签: c# wpf speech-recognition

我正在开发一个使用语音识别的WPF应用程序。在说出语法词时,事件不会激活。其次,我不确定发动机是否启动。怎么检查?以下是代码。

namespace Summerproject_trial
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
       private SpeechRecognitionEngine recEngine = 
                                    new SpeechRecognitionEngine();           

        public MainWindow()
        {
            InitializeComponent();
            Choices mychoices = new Choices();
            mychoices.Add(new string[] {"Ok", "Test", "Hello"});
            GrammarBuilder gb = new GrammarBuilder();
            gb.Append(mychoices);
            Grammar mygrammar = new Grammar(gb);
            recEngine.LoadGrammarAsync(mygrammar);          

            recEngine.SpeechRecognized += 
                               new EventHandler<SpeechRecognizedEventArgs>
                                              (recEngine_SpeechRecognized);

            recEngine.SetInputToDefaultAudioDevice();              
        }

        void recEngine_SpeechRecognized(object sender,
                                        SpeechRecognizedEventArgs e)
        {
            MessageBox.Show("You said: " + e.Result.Text);
        }    
    }
}

2 个答案:

答案 0 :(得分:1)

你忘了开始听取输入。

在构造函数的末尾尝试这个。

recEngine.RecognizeAsync(RecognizeMode.Multiple);

答案 1 :(得分:0)

@ Anri需要回答,但 还需要使用CultureInfo创建SpeechRecognitionEngine。 (您可以在没有CultureInfo的情况下创建SpeechRecognitionEngine,但是您需要明确设置识别器语言。)

此外:移动耳机(我认为你的意思是某种蓝牙耳机)通常不适用于System.Speech。桌面SR引擎中使用的SR引擎需要比蓝牙更高质量的音频输入。

所以,应该有效的完整代码:

   private SpeechRecognitionEngine recEngine = 
                                new SpeechRecognitionEngine("en-US");           

    public MainWindow()
    {
        InitializeComponent();
        Choices mychoices = new Choices();
        mychoices.Add(new string[] {"Ok", "Test", "Hello"});
        GrammarBuilder gb = new GrammarBuilder();
        gb.Append(mychoices);
        Grammar mygrammar = new Grammar(gb);
        recEngine.LoadGrammarAsync(mygrammar);          

        recEngine.SpeechRecognized += 
                           new EventHandler<SpeechRecognizedEventArgs>
                                          (recEngine_SpeechRecognized);

        recEngine.SetInputToDefaultAudioDevice();
        recEngine.RecognizeAsync(RecognizeMode.Multiple);
    }