Unity学习笔记-通过接入百度语音sdk实现语音唤醒功能

23 篇文章 0 订阅

通过接入百度语音sdk实现语音唤醒功能

上次研究语音唤醒已经不知道是什么时候了,在这里感谢互联网,让基本对安卓完全没基础的小白做到了这个功能
具体的代码实现在下面的这个帖子里可以说是很完整了(大佬可能是忘了还是懒得看,甚至appid啥的忘了打码)

https://blog.csdn.net/weixin_43271060/article/details/108381456

就是这个帖子,把从百度开账号到安卓代码,打aar包,配置文件里面的依赖和unity如何调用都写的一清二楚明明白白
小弟就是单纯的依葫芦画瓢,站在巨人的肩膀上而已,orz.只能说大佬们真的太强了
这里我会说下自己在跟着帖子做的时候的心路历程和过程遇到问题是如何解决的

第一步

在百度智能云里开通账号,在语音技术里创建应用
Tips在创建的时候记得勾选包名 Android以及写上自己的包名
在这里插入图片描述
如果你不需要用到语音唤醒那么可以不用加包名,如果要用到的话一定要有包名,这个在上图的右边有写上原因
在实际的操作中我遇到的一个问题就是语音识别没问题,但是语音唤醒死活整不出来,看日志上面显示的是百度的错误码11002,查看官方文档是没有授权文件
在这里插入图片描述
也就是上图说的包名是一定要正确的.也就是在百度里设置的包名,安卓里aar项目里的包名,unity里真机打包出来时设置的包名
只有这三个的包名都是一致的情况下,sdk才会在联网的时候去申请授权文件,唤醒的功能才能算是正式激活
这是个巨坑,我卡在这个地方大概有一个多小时,全靠百度看大佬们的帖子才发现的这个问题,不过大佬们都没有提及到的就是unity里playersetting的包名也是要和百度里设置的一样的,不然就会有问题.为啥我会联想到unity的包名就是因为大佬们的帖子里都在说安卓和百度的包名一致,说明他们的环境不包括unity,但是我的项目就是unity的,所以才会想起来unity里也是需要保持包名一致的
至于为啥上面提供的帖子里没有特别注明,现在想想是因为帖子里有一个关于签名的方法和aar打包的方法,这两个东东大佬是引用了另一个帖子来解决的,在那个帖子里我记得是有说明安卓和unity的包名必须一致的.所以可能大佬那个时候已经是在包名一致的情况下去做的这个项目,所以没有遇到这个问题,也才没有特别提出.

其实第一步已经把我自己在实际操作中遇到的最难的问题解决了,所以这后面的我没啥好说太多的

第二步

新建一个as项目,这里大佬也没有特别说明,我就用了之前自己新建的模式去建了,没啥问题
在这里插入图片描述
这是新建的项目里的结构
因为我们最终是从as 里打包出一个aar包到unity里,所以我们还需要在这个项目里面新建一个module
这个有一点安卓基础的应该都不难
在这里插入图片描述
然后选Android library就可以了
在这里插入图片描述
这里新建了module之后的结构

第三步

解压下载的压缩包到任意目录下,然后把里面的一个jar包引入到刚才建的module中,记得添加引用(大佬的帖子里都有说,我就不多说了)在这里插入图片描述就这个包
哦这个提一嘴,如果是新项目的话,还需要在这里面添加一个和unity关联的jar包,因为需要给unity发送消息需要用到这个包里的方法
所以一共我们需要用的包是两个
在这里插入图片描述

unity的这个包百度一下会有很多告诉你在哪里拿这个包的,不过还得注意一下,不同的unity版本,这个包在所在的位置是不同的喔,记得留心
我用的是2019的,在前面我写的安卓unity相互跳转的帖子里有说道具体的路径位置
嘛,不过这个unity的jar包最后打包出来的时候是需要删掉的,不然在unity打包成最终的apk的时候会失败,因为unity自己就有这个jar包了,你又在这个aar里重复用,unity在打包项目上的时候会不知道到底用谁导致报错,无法打包

第四步

敲java代码,这里我完全是cv大法完成的,过程没有加入自己的一点灵魂
照着帖子做就可以了,遇到引用报红的时候先不急,把所有代码都写进入之后再引用就可以了
这里也有一个小地方需要注意的
帖子里说的
在这里插入图片描述
这里编写的是新建的module里的这个文件,不是一开始新建项目自带的app里的同名文件
然后可能有三个类的引用会有红波浪线,那个可以忽略它, 在实际的应用中是没有影响的

第五步

打aar包
这个因为小弟之前打过好几次了,所以这个就相对比较熟练
在这里插入图片描述
找到module里的bulid.gradle,然后添加右面的那个代码,sync一下
然后在右边点gradle会弹出下图的框,找到你的module名称,点击里面的other,然后找到刚才代码里敲的方法名,我这里写的和帖子大佬里写的一样,双击右边的那个方法就可以开始打包了
在这里插入图片描述
可能是之前打包过,所以没有遇到什么问题,如果在打包过程中遇到问题的话可以参考帖子大佬最后发的那个链接,里面有很多解决打包遇到的问题的方法

第六步

找到这个路径里-release后缀的aar包,这个就是我们需要的了
注意前面说了需要删掉aar包里的unity-classesjar包,不然后面unity打包回报错
怎么删很简单,先把这个包后缀改成zip,然后双击打开,找到libs,然后把里面的这个unity的jar包删掉,再把后缀改回aar就可以了

#@ 第七步
导入unity的路径,需要放置在下图的路径里,如果是新项目就自己创建文件夹就好了
在这里插入图片描述

第八步

unity这里的代码我也是直接cv大法大佬的基本没有改过
可能需要自己在类里声明一个AndroidJavaObject这个类其他的没啥
不过确实有可以优化的地方.嘛这个问题不大
不过这里帖子大佬没有说的一个就是这个类不是单纯的挂载到场景中的对象就可以了
还需要在start或者awake里去调用唤醒的方法
并且,如果前面安卓代码和我一样是直接复制粘贴没有注意看代码的话,等你在打包的时候一定是会出问题的,你会发现死活接受不到安卓回传的信息
这里大佬是没有特别说要注意的
我也是在自己之前和安卓工程师对接的时候知道的,就是as在代码里通过unity代码向我们发送消息的时候,是需要场景中某一个对象作为载体的,通过名称去找到这个载体,然后找到载体上挂载的方法去回传信息给unity
在这里插入图片描述
像这里,大佬写的对象就是叫NetLogic,然后调用的方法名叫WakeupResult
所以在unity里你的场景里也必须要有这个对象名才可以实现消息的互通
嘛,这个仔细想想的话自己在做安卓和unity消息互通的时候已经试过了,只是当时一次就成功了就没多留意

到这里基本就结束了我在实现语音唤醒功能中的流程了
希望能对大家有所帮助

感谢以下帖子
虽然没有实际解决我的问题,但给我的灵感和启发都是至关重要的

https://blog.csdn.net/qq_45137584/article/details/115443437

https://www.jianshu.com/p/a9ae5d3333d2

2021.9.16更新
需要注意一下
如果需要让用户自定义是否开启语音唤醒的话,除了上面untiy里的stop唤醒的方法外
还需要调用在as里写好的释放唤醒实例的那个方法才行
举个例子,我是通过点击一个toggle调用脚本的enable去开启语音唤醒,disable去关闭语音唤醒
在脚本的awake方法里先和aar包取得联系,然后在onenable方法里开启初始化语音唤醒和开始唤醒的方法
如果是不需要语音唤醒的话,点击toggle,识别到ison = fales,会自动调用脚本的ondisable方法,然后在这个方法里调用关闭语音唤醒和释放语音实例的方法就可以了
在这里插入图片描述
就像这样

场景中的toggle是这样设置的
在这里插入图片描述

2023.5.17
更新一下,前面说的包名不一定是要修改文件夹名称,好像直接在app的buildgradle文件里修改applicationid也行的,我在百度有申请了一个新的账号,申请了语音识别的应用,把对应的参数放在下载的sdkdemo里,然后就只修改了applicationid,好像也是能直接使用的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淳杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值