[语音技术]C#在win平台基于录音类试写唤醒
goJhou 发布于2017-10 浏览:13058 回复:28
0
收藏

基本的思想就是

我会多线程不停的利用录音类识别实时的话语

当我的话语中出现了 xxx(语音唤醒词) 时,以后的句子(包括本句)将被计算机处理

直到再次说出 xxx 时,程序再次进入监听状态 等待唤醒。

这是一个基于windows的唤醒实验。试用下来交互其实还是可以接受的。

如下是部分代码,我的唤醒词设置成了“贾维斯”

public Task Update()
        {
            return Task.Run(() =>
            {
                var data = File.ReadAllBytes(time + ".wav");
                Dictionary d = new Dictionary();                
                //d.Add("lan", "zh");
                var result = _asrClient.Recognize(data, "pcm", 16000, d);                
                if (result.GetValue("err_msg").ToString() == "success.")
                {
                    File.Delete(time + ".wav");
                    Application.Current.Dispatcher.Invoke(() =>
                    {
                        string res = result.GetValue("result").First.ToString();
                        Console.WriteLine(result.GetValue("result").ToString());
                        Regex regex = new Regex("贾维斯");//捕捉唤醒词 可在语音识别中设定特别词优化
                        Match match = regex.Match(res);
                        if (match.Success || IsJarvis) //说出了贾维斯或处于唤醒 开始一系列操作
                        {
                            if(IsJarvis)
                            {
                                if (match.Success)//唤醒状态下又说出了贾维斯 退出唤醒
                                {
                                    IsJarvis = false;//退出贾维斯模式
                                    Console.Write("\t进入睡眠,等待唤醒");
                                }
                                else
                                {
                                    if (!UNIT.UNIT.IsFinishedThisUnit)
                                    {
                                        Queue.Queue.WaitForIntentionsWord.Add(WordToNumber.WordToNumberClass.WordToNumber(res));
                                    }
                                    else
                                        Queue.Queue.WaitForDealFromVoice.Add(WordToNumber.WordToNumberClass.WordToNumber(res));
                                }
                            }else
                            {
                                IsJarvis = true;
                                Console.Write("\t唤醒成功");
                                Queue.Queue.WaitForDealFromVoice.Add(WordToNumber.WordToNumberClass.WordToNumber(res));//res..Replace(",", "").Replace("贾维斯", ""))
                            }
                        }
                    });
                    return result.GetValue("result").First.ToString().Replace(",","");
                }
                return null;
            });
        }
收藏
点赞
0
个赞
共28条回复 最后由用户已被禁言回复于2022-04
#9用户已被禁言回复于2017-11

可以的,这代码示例很清晰

0
#8goJhou回复于2017-11
#7 笔墨哥回复
一环套一环呀,精彩~

哈哈哈哈 封装嘛

0
#7笔墨哥回复于2017-11
#2 goJhou回复
本章代码需要承接录音类。 录音类代码移步至:http://ai.baidu.com/forum/topic/show/492634
展开

一环套一环呀,精彩~

0
#6笔墨哥回复于2017-11
#5 goJhou回复
2333 你试试吧,楼上好像试下来问题蛮多的。我怎么这么顺利= =

可能天才就是实力加运气吧~

0
#5goJhou回复于2017-11
#4 荒墨丶迷失回复
还记得我们上次讨论的H5的问题呀,哪个录音2-3秒不说话自动停止的,现在还没解决,这个唤醒例子我试试java可不可以用~hhhh
展开

2333 你试试吧,楼上好像试下来问题蛮多的。我怎么这么顺利= =

0
#4荒墨丶迷失回复于2017-11

还记得我们上次讨论的H5的问题呀,哪个录音2-3秒不说话自动停止的,现在还没解决,这个唤醒例子我试试java可不可以用~hhhh

1
#3kohakuarc回复于2017-10
#2 goJhou回复
本章代码需要承接录音类。 录音类代码移步至:http://ai.baidu.com/forum/topic/show/492634
展开

感谢大佬提供的代码示范~~

0
#2goJhou回复于2017-10

本章代码需要承接录音类。

录音类代码移步至:http://ai.baidu.com/forum/topic/show/492634

1
TOP
切换版块