接的科大讯飞的sdk,unity一键打包配置xcode机制,功能均在unity端实现
1.SDK下载d导入
导入讯飞听写SDK,这里我需要重点说下!!!!!不要直接用的工程里的SDK,因为我的SDK是用我的AppId下载的,你需要用自己的appid下载对应SDK。 后面会附上工程demo链接,这里我就介绍相关文件,,,libXunFeiVA.a和XunFeiVA这个文件是自己用c和oc封装的讯飞的相关类,不用管他,放入你工程里就ok
2.封装iOS语音接口
XunFeiVAInterface 这个是c#类,主要提供讯飞相关接口给unity和ios互相调用的,直接用就可以了,不用去修改相关代码,都是事件委托处理,这里需要介绍一点,平时我们经常看到
,ios调unity 用到的api都是UnitySendMessage(),我这用的是MonoPInvokeCallback这个类去封装了c的静态方法,可以oc直接调c方法。实现ios给unity传回调
3.编辑unity调用及回调接口
Test类就是我用来测试用的,需要调注册讯飞的一些信息,这里你只需要替换你自己的AppId就可以,语音开始听写接口 XunFeiVAInterface.ISR_StartRecording() 语音听写结束接口XunFeiVAInterface.ISR_StopRecording(),还有其他的接口如音量大小,错误信息,各个回调等,代码都很详细。
4.踩坑总结
前面三步一已经完美的实现了讯飞语音听写功能,这了我要记录的时一个坑,找了好久才解决的。因为我的项目需要播放一些本地音频文件,所以当我调用的讯飞听写接口后,各种回调也拿到了。但我本地的音频不能播放了,Xocde Debug显示大概是说AVAudioSession已经被占用,意思是需要每次调用讯飞接口后需要重置,这个问题安卓端并没有。这里自己试了很多方法,最后这样解决的,添加了AddAction.h文件内容:
#import
@interface AVAudioSession(AddAction)
@end
添加AddAction.m文件:
#import "AddAction.h"
@implementation AVAudioSession (AddAction)
- (BOOL)setActive:(BOOL)active withOptions:(AVAudioSessionSetActiveOptions)options error:(NSError * _Nullable __autoreleasing *)outError {
return YES;//强行返回true
}
@end
这里用了oc的分类,就是给系统类添加方法用的,即类似c#的重写,大意就是给系统的一个类添加了跟系统重名的方法,分类的优先级高于系统的方法,调用时app启动就调用,这两个
文件我后面都直接放在了unity 的plugins文件夹下的,也不用去管他
TIM截图20200522114823.png (183.12 KB, 下载次数: 14)

TIM截图20200522114807.png (81.42 KB, 下载次数: 17)

TIM截图20200522114739.png (60.25 KB, 下载次数: 14)

TIM截图20200522105909.png (33.92 KB, 下载次数: 15)

网盘链接:https://pan.baidu.com/s/1sugh4qEJwTaWgn4g_itEYQ