基本的思想就是
我会多线程不停的利用录音类识别实时的话语
当我的话语中出现了 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
切换版块
是呀~winform没啥市场了
winform 按go大神的说法就是过时了...
不是喔,WPF封装
winform封装
大家赶紧扯了 2年前的帖子 作者已经发了新的测评,快去围观吧
嗯,BS的兴起对CS确实冲击有点
这个系列已经完结啦,文章是17年的喔
但是感觉现在用这个语言的不多
实际应用确实应该是传入的语音,期待后续更新
是的呢,.net还是有一席之地的
我们主要使用studio软件,这个c#应用较多
写得不错,学习一下。
请看一整个系列,不要拿其中一篇说事喔
这也叫唤醒吗?唤醒不是为了解放双手吗?直接读一个音频文件,可还行。如果这个音频文件是前端传给后端的, 有什么办法控制上传录音的时长?《我会多线程不停的利用录音类识别实时的话语》这部分,代码能分享一下吗?
水帖是不好的行为哟~
哈哈哈哈哈哈
嗯哼,你这么说,我就是很开森~
你终于又开始水起来了!
在社区,经常发生这种“刚好”的事情,社区真的好棒哟~
我刚好试着写一个java的唤醒线程