iOS点点滴滴iOS开发笔记iOS低频高技收集

iOS语音提醒开发总结

2017-09-24  本文已影响319人  一铭_

10.2 更新

开源了!以下优化用于饿了么蜂鸟App中,项目链接在链接 ,欢迎 star 和 pr.

语音播放一直是一个较低频的开发知识点,很多开发并没有这样的需求,所以导致在墙内搜不到太多关于它的一些总结(主要是踩坑),刚好最近接了一个语音优化的需求,将自己的经验与总结记录下来.

首先要介绍微信团队总结的一篇,给出了很多解决方案
https://mp.weixin.qq.com/s/yYCaPMxHGT9LyRyAPewVWQ

先列出待优化的点

优化1

当有提示音播放时,后台音乐被中断且无法自动恢复.
这个问题首先想到AVAudioSession 中 category 的设置问题,可以根据下图结合 app 的实际需求去选择合适的一个.


AVAudioSession 的类型

设置完成之后要注意是否在播放完成的代理方法中执行了:

function.png

这里还要注意一点,AVAudioSession在设置 category 的时候支持传入 options,来对设置的 category 来微调.参看LPDSoundService.

category.png

优化2

插耳机和扬声器播放声音音量不稳定这个问题,首先去定位播放的声音文件,发现声音文件确实存在几个声音高低的问题.
接下来再去找发现在耳机插入时存在短暂的声音丢失,那我的优化办法是在监听耳机的状态的方法里暂停播放0.1s.耳机的插入拔出会触发这个通知AVAudioSessionRouteChangeNotification

function.png
接下来对音量处理参考微信的解决办法,用MPVolumeView中的 slider 来处理音量的控制,但是把MPVolumeView加到了keyWindow上,参看LPDVolumeManager这个音量控制的单例类.

优化3

在接电话的时候还有语音播放这个问题找了好久的解决办法,后来发现自己犯傻了...
首先肯定是要在播放语音之前判断当前时候是否处在通话状态,轻松搜到CTCallCenter类,但是发现这个不起作用,那就去私有库找找API(不上商店就是好),后来兜兜转转发现这个CTCallCenter是 iOS9以下,在10之后换成了CXCallObserver类,贴代码,参看LPDTeleponyManager.

function.png

优化4

有时候播放语音有震动,有时候没有....
这个问题真是奇葩了,产品逻辑要求播放声音的时候要求有震动,这简单

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

但是突然发现,有时候震动就突然没了,调试发现方法也走了,最后无奈发现苹果然后还有一手,

image.png

不开这一项,怎么震动...

总结

在做整个优化的过程中踩了不少坑也花了不少时间,在调用 API 的时候最好自己看看上面的注释,尤其是不熟悉的 API,能看官方文档就看官方的.

参考资料

https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/ConfiguringanAudioSession/ConfiguringanAudioSession.html#//apple_ref/doc/uid/TP40007875-CH2-SW1

上一篇 下一篇

猜你喜欢

热点阅读