首页 > 代码库 > 关于接入百度语音的总结

关于接入百度语音的总结

百度语音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学习:)

 

 

 

 

关于接入百度语音的总结