百度语音SDK的接入总算告一段落,感觉接SDK是件很麻烦的事,接过的同学都知道!先来谈一谈接SDK麻烦的二三事:)
坑
接入的平台一般都是ios或者android,对于wp这种平台还没接过,不过表示前面两个已经暗坑无数,如果要接第三个平台感觉想死的心都有!
Android的坑其实最大的问题就是不能调试C++代码,所以一旦发现C++代码有问题就需要修改,并且需要重新NDK编译,这部比较耗时;而且我用的是
eclipse所以每次编译到生成最终包需要一定的时间。
Ios的坑其实主要来自场外因素,比如哪天更新了Xcode或Ios的版本就有可能发生证书过期什么乱七八糟的问题。
关于百度语音接入Ios的总结
上篇关于语音的博文其实已经总结了关于百度Android的识别,接入相对较简单,但是在接入ios的过程中遇到了一个问题,
这个问题困扰了我很多天,就是在语音识别后,游戏的声音(背景音乐和音效)消失了,但游戏能够正常的运行,刚开始以为自己调用的方式不对,
就使劲查是否在识别完后没有关闭服务,后来利用排除法发现只要调用接口cancel,音乐还是消失,且游戏在cancel的过程中是做了音乐的恢复,所以
不去考虑上层逻辑代码的问题。
后来google很久 什么播放设备被强占,线程被阻塞,或者是cocos2dx底层的语音处理逻辑有问题(还找最新版本的代码替换)结果都解决不了问题,
后来看了很多资料,看到一些共同的点都会涉及到ios底层的音频(openal),下面这个网站是关于其的基础知识:
http://msching.github.io/blog/2014/07/07/audio-in-ios/
其中提到了对应AudioSession的设置:
那是就想是不是百度在识别完后需要我们自己手动的把AudioSession的状态设置一下,后来自己试了一下发现也没什么用!!!
哈哈,其实那时已经感觉黔驴技穷了,索性就重新翻阅了一遍百度给的文档,发现了下列代码:
1 // 定制SDK是否对AudioSession进行操作,如果外部需要操作AudioSession,应当通过此接口禁止SDK对AudioSession进行操作 2 #define BDVR_CONFIG_KEY_DISABLE_AUDIO_SESSION_CONTROL @"disable_audio_session_control" 3 - (void)setConfig:(NSString *)key withFlag:(BOOL)flag;
当时就想,肯定就需要将其它禁止调用,结果发现识别完后游戏音乐就出来了(ios8之后再识别后会将应用静音),但是遇到一个问题音乐的声音变小了,就去查了资料,发现
在识别完后游戏还是处于录音状态,所以需要重新设置AudioSession的状态,代码如下:
1 //将声音模式调回正常状态 2 AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 3 NSError *err = nil; 4 [audioSession setCategory :AVAudioSessionCategoryAmbient error:&err]; 5 if(err) 6 { 7 // NSOSStatusErrorDomain 8 NSLog(@"audioSession: %@ code = %d %@", [err domain], [err code], [[err userInfo] description]); 9 return; 10 }
以上就是最近几星期关于sdk的接入内容,后续更新unity学习:)