Cocos2d-x开发系列 iOS平台中音频播放的一个坑

现象:
iOS平台下,mp3文件用AudioEngine:play2d播放没有音声音。

前提:
之前项目是用3.2开发的,后来移植到3.6。期间引擎新增加了一个音频播放机制,AudioEngine。但是我们一直都是用的SimpleAudioEngine来处理音频的。新增加一个业务,将一段音乐拆成三段,然后需要用到播放回调。所以选择了AudioEngine。在android一直都没问题,但是在移植iOS的时候,出现没有声音的问题,跟进代码才发现,代理函数中初始化音频设备失败。如图:
初始化音频设备代码

解决思路:
首先查看是否因为移植代码的问题,对比了代码没有差别。然后新建项目播放尝试了下,发现是可以播放的。新建的是一个Lua项目,发现Luademo Kill Pests游戏原来的声音没了。

查看了Cocos的升级日志发现AudioEngine是3.4新引入的,表现得很不错的一个音频引擎。
底层是封装了OpenAL( OpenAL是跨平台的)。并没有区分背景和音效。

最后在百度搜索,终于找到答案。
My hunch is that Apple’s implementation of this function only returns the correct deviceONCE for the life of the application. Every time alcOpenDevice is called after that, it returns NULL.

苹果设备只能初始化连接设备一次,之后的连接都是返回NULL,而工程中使用了两个引擎,旧的引擎在初始化的时候也连接了一次声音设备,所以当我第二次去连接的时候就返回NULL了。于是我修改了代码,只使用一套声音引擎,就可以了。这确实是一个比较隐蔽的坑。

结论:
iOS中同时使用两套音频会导致后面一个没有声音

解决方案:
使用同一个音频接口

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值