2 sxl 88 sxl_88 于 2015.07.14 15:50 提问

利用微软语音识别类库System.Speech.Recognition,无法异步调用识别引擎。

C# Winform项目中,利用微软语音识别类库System.Speech.Recognition,可以正常识别语音,并异步调用语音的识别引擎。
目前遇到的问题是,在项目中有一个“视频监控”栏目。在“视频监控”正常运行的情况下,如果通过语音讲话就无法正常识别语音且不执行异步调用语音的识别引擎。

请问,如何实现在“视频监控”正常运行的情况下,可以正常识别语音,并异步调用语音的识别引擎。请帮忙看看怎么修改下面的代码:

代码:

private void FrmApp_Load(object sender, EventArgs e)
{

        this.Hide();

        TheadPackage();

        Thread m_trdSpeech = new Thread(doSpeechWork);//创建"语音识别"线程
        m_trdSpeech.Start();


    }

void TheadPackage()
{
Thread t_thread = new Thread(threadPro);//创建运行"视频监控"线程

t_thread.Start();
}

void threadPro()
{
try
{
MethodInvoker MethInvo = new MethodInvoker(ShowFrom);
BeginInvoke(MethInvo);
}
catch (Exception ex)
{
LLog.Log(string.Format("threadPro:{0}\terrmsg:{1}", this.ToString(), ex.Message));
}
}

void ShowFrom()
{
frmmontor = new FrmMonitor(); //启动运行"视频监控"的窗体
frmmontor.Show();
}

//语音识别
void doSpeechWork()
{
try
{
SRE.SetInputToDefaultAudioDevice();

GrammarBuilder GB = new GrammarBuilder();
GB.Append("选择");
GB.Append(new Choices(new string[] { "红色", "绿色" }));
Grammar G = new Grammar(GB);
G.SpeechRecognized += new EventHandler(G_SpeechRecognized);
SRE.LoadGrammar(G);
SRE.RecognizeAsync(RecognizeMode.Multiple); //<=======异步调用识别引擎,允许多次识别

        }
        catch (Exception ex)
        {
            LLog.Log(string.Format("threadPro:{0}\terrmsg:{1}", this.ToString(), ex.Message));
        }
    }

//目前的问题是,在运行“视频监控”的情况下,无法异步调用识别引擎这个方法
void G_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
//Text = e.Result.Text;
switch (e.Result.Text)
{
case "选择红色":
BackColor = Color.Red;
break;
case "选择绿色":
BackColor = Color.Green;
break;
}
}

1个回答

sxl_88
sxl_88   2015.07.14 20:15

通过语音打开了“视频监控“,在“视频监控“运行情况下,是不是无法异步调用识别引擎,所以导致无法识别语音。
请各位高手帮忙看看,谢谢!

Csdn user default icon
上传中...
上传图片
插入图片