C#语音命令:等待输入

C#语音命令:等待输入,c#,winforms,C#,Winforms,我有一个Windows窗体应用程序,可以识别语音命令,然后执行相应的操作。然而,我不知道如何一个接一个地说命令 代码: 我是遗漏了什么,还是只是做错了什么?您需要使用System.Speech。这是我在系统上的操作方式。您可以执行以下操作: using System.Speech.Synthesis; using System.Speech.Recognition; namespace Alexis { public partial class frmMain : Form {

我有一个Windows窗体应用程序,可以识别语音命令,然后执行相应的操作。然而,我不知道如何一个接一个地说命令

代码:


我是遗漏了什么,还是只是做错了什么?

您需要使用System.Speech。这是我在系统上的操作方式。您可以执行以下操作:

using System.Speech.Synthesis;
using System.Speech.Recognition;

namespace Alexis
{
    public partial class frmMain : Form
    {
        SpeechRecognitionEngine _recognizer = new SpeechRecognitionEngine();
        SpeechSynthesizer Alexis = new SpeechSynthesizer();
        SpeechRecognitionEngine startlistening = new SpeechRecognitionEngine();
    }
// ...
}
然后以主要形式

private void frmMain_Load(object sender, EventArgs e)
    {

        _recognizer.SetInputToDefaultAudioDevice();
        _recognizer.LoadGrammarAsync(new Grammar(new GrammarBuilder(new Choices(File.ReadAllLines(@"Default Commands.txt")))));

        _recognizer.SpeechDetected += new EventHandler<SpeechDetectedEventArgs>(_recognizer_SpeechDetected);
        _recognizer.RecognizeAsync(RecognizeMode.Multiple);

        startlistening.SetInputToDefaultAudioDevice();
        startlistening.LoadGrammarAsync(new Grammar(new GrammarBuilder(new Choices("alexis"))));
        startlistening.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(startlistening_SpeechRecognized);
    }
将触发命令,这样您就可以调用这些命令。另外,我不会使用
if(e.Result.Text==“启动节能模式”)
我会这样使用
if(speech==“启动节能模式”)
所以如果你想继续,你可以这样做

if (speech == "initiate power saving mode")
{
    Taskbar taskbar = new Taskbar();
    taskbar.Show();
    SoundPlayer deacr = new SoundPlayer(Properties.Resources.deacr);
    deacr.PlaySync();
}
else if (speech== "confirm")
{
    SoundPlayer deacd = new SoundPlayer(Properties.Resources.deacd);
    deacd.PlaySync();
    Application.SetSuspendState(PowerState.Suspend, true, true);
}
else if (speech == "cancel")
{
    SoundPlayer cancelled = new SoundPlayer(Properties.Resources.cancelled);
    cancelled.PlaySync();                    
}
确保将命令“启动节能模式”和“取消”放在命令txt文档中(区分大小写)


然后,如果您想降低发布,那么您可以创建一个选项卡式表单并添加您自己的自定义命令。希望这有帮助。但请记住,这是一个供您参考的示例。

您需要使用System.Speech。这就是我在系统上执行此操作的方式。您可以执行以下操作:

using System.Speech.Synthesis;
using System.Speech.Recognition;

namespace Alexis
{
    public partial class frmMain : Form
    {
        SpeechRecognitionEngine _recognizer = new SpeechRecognitionEngine();
        SpeechSynthesizer Alexis = new SpeechSynthesizer();
        SpeechRecognitionEngine startlistening = new SpeechRecognitionEngine();
    }
// ...
}
然后以主要形式

private void frmMain_Load(object sender, EventArgs e)
    {

        _recognizer.SetInputToDefaultAudioDevice();
        _recognizer.LoadGrammarAsync(new Grammar(new GrammarBuilder(new Choices(File.ReadAllLines(@"Default Commands.txt")))));

        _recognizer.SpeechDetected += new EventHandler<SpeechDetectedEventArgs>(_recognizer_SpeechDetected);
        _recognizer.RecognizeAsync(RecognizeMode.Multiple);

        startlistening.SetInputToDefaultAudioDevice();
        startlistening.LoadGrammarAsync(new Grammar(new GrammarBuilder(new Choices("alexis"))));
        startlistening.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(startlistening_SpeechRecognized);
    }
将触发命令,这样您就可以调用这些命令。另外,我不会使用
if(e.Result.Text==“启动节能模式”)
我会这样使用
if(speech==“启动节能模式”)
所以如果你想继续,你可以这样做

if (speech == "initiate power saving mode")
{
    Taskbar taskbar = new Taskbar();
    taskbar.Show();
    SoundPlayer deacr = new SoundPlayer(Properties.Resources.deacr);
    deacr.PlaySync();
}
else if (speech== "confirm")
{
    SoundPlayer deacd = new SoundPlayer(Properties.Resources.deacd);
    deacd.PlaySync();
    Application.SetSuspendState(PowerState.Suspend, true, true);
}
else if (speech == "cancel")
{
    SoundPlayer cancelled = new SoundPlayer(Properties.Resources.cancelled);
    cancelled.PlaySync();                    
}
确保将命令“启动节能模式”和“取消”放在命令txt文档中(区分大小写)


然后,如果您想降低发布,那么您可以创建一个选项卡式表单并添加您自己的自定义命令。希望这有帮助。但请记住,这是一个供您参考的示例。

创建一个事件?然后将代码粘贴到事件处理程序中?我遗漏了什么吗?在你的
if
/
else
语句系列中显示的括号看起来“奇怪”。你真的想在第一个
if
块内测试
e.Result.Text==“confirm”
(它已经测试了
e.Result.Text==“initiate power Save mode”
)是的,有点像如果这个,那么如果那个。创建一个事件?然后将代码粘贴到事件处理程序中?我遗漏了什么吗?在你的
if
/
else
语句系列中显示的括号看起来“奇怪”。你真的想在第一个
if
块内测试
e.Result.Text==“确认”
(它已经测试了
e.Result.Text==“启动节能模式”
)是的,有点像如果这个,那么如果那个。