基本的思想就是
我会多线程不停的利用录音类识别实时的话语
当我的话语中出现了 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;
});
}
TOP
切换版块
可以的,这代码示例很清晰
哈哈哈哈 封装嘛
一环套一环呀,精彩~
可能天才就是实力加运气吧~
2333 你试试吧,楼上好像试下来问题蛮多的。我怎么这么顺利= =
还记得我们上次讨论的H5的问题呀,哪个录音2-3秒不说话自动停止的,现在还没解决,这个唤醒例子我试试java可不可以用~hhhh
感谢大佬提供的代码示范~~
本章代码需要承接录音类。
录音类代码移步至:http://ai.baidu.com/forum/topic/show/492634