语音识别只监听字典中的命令?

时间:2018-02-08 17:24:01

标签: c#

好的,我正在研究我的计划。问题是每当spymode = true时,它都不会注册我对文本文件所说的内容。它只是在“CommandsList”字典中注册set命令。因此,每当我说“twitch”这是该词典中的命令时,它会将其写入spymodeLog.txt文件。但每当我说一些不是命令的东西,例如“你好我的名字是罗宾”时,就不会写入.txt文件。它只接受我的字典中的命令,并在我说出时将其输出到文件中。为什么是这样?我该如何解决?真奇怪。

    static Dictionary<string, string> CommandsList = new Dictionary<string, string>();
    internal static void recEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        if (keyHold == true)
        {
            string command = "";
            if (CommandsList.TryGetValue(e.Result.Text, out command))
            {
                System.Diagnostics.Process.Start(command);
            }
        }

        if (spymode == true)
        {
            DateTime now = DateTime.Now;
            string path = Application.StartupPath + "spymodeLog.txt";

            if (File.Exists(path))
            {
                using (StreamWriter wr = File.AppendText(path))
                {
                    wr.WriteLine(e.Result.Text.ToString());
                }
            }
            else if(!File.Exists(path))
            {
                using (var wr = new StreamWriter("spymodeLog.txt", true))
                {
                    wr.WriteLine(e.Result.Text.ToString());
                }
            }
        }

    }

1 个答案:

答案 0 :(得分:0)

当识别出来自词典的命令时,SpeechRecognized事件触发,因此该事件的名称。

你想要的是SpeechDetected事件,当它识别出已经说过的事情时,帮助会说明事件。

  

每个语音识别器都有一个区分沉默和语音的算法。当SpeechRecognitionEngine执行语音识别操作时,当其算法将输入识别为语音时,它会引发SpeechDetected事件。

此事件可让您在捕获音频时获取实际位置。这允许你去找到音频部分并将其保存到文件中或者通过允许你将音频转换为文本的方法发送它(我不记得方法,但它们在那里,我以前使用过它)< / p>

第二种方法对每台计算机都不起作用。我的PC中有3个实际上使用此方法,此方法是创建一个名为DictationGrammar

的特殊语法分区的实例

您要做的是创建此类的新实例。您有3种方法可以执行此操作,无论是正常,拼写还是默认的计算机可访问性选项。

默认计算机辅助功能:

var grammar = new DictationGrammar();

正常:

var grammar = new DictationGrammar("grammar:dictation");

拼写:

var grammar = new DictationGrammar("grammar:dictation#spelling");

使用该词典与所有你想要的组合,你可以创建一个选择树,导致通用识别。我在我的旧应用程序中,我曾经有关键字“注意”必须说,然后它落在DictationGrammar上,并开始识别所有文本。

因为它不适用于所有计算机,而其他完全正常工作的命令我认为它与正在加载的错误语言的听写语法或类似的东西有关但是没有选择改变它所以我去了{ {1}}并将音频转换为自己的文字。