关于NewAudioEngine跟语音控制冲突的问题

    Cocos2d-x 3.3最终版,使用了NewAudioEngine,应用运行时,当长按Home键,会出来ios系统原生的半透明语音控制界面(iPhone4是语音控制,iPhone4S以上是Siri界面),这时再按一下Home键回到应用,会发现应用再也无法播放音频,哪怕你切换了场景也不行。或者你退出桌面,再回去应用也不能再播放音效。只有当把应用的进程关掉,然后再打开才能恢复正常。这个问题在cpp-tests的NewAudioEngineTest下面也存在。
    测试过ios7跟ios8都有这个问题,另外只按一次Home键,去到后台再回来是不会出现问题的。就只有长按进入语言控制界面,才会出现。
    不知道有没有谁遇到过这个问题,谢谢。

你好,感谢你的反馈,稍后我将测试下

谢谢版主老大,这个问题,4.4也存在。另外,如果释放了_audioEngineImpl对象就能发声音,也就是调用cocos2d::experimental::AudioEngine::end()。只是这样没有从根本上解决问题。

测试过,确实存在这个问题。再次感谢楼主反馈:7::7:

我针对这个问题建立了个issue,盯这个问题吧

https://github.com/cocos2d/cocos2d-x/issues/10381

此Bug已经修复了,楼主记得去看下

感谢通知,不过测试了下,好像第一次按home键是没问题,接收到了AVAudioSessionInterruptionNotification通知,但第二次再按home键就不会再接收到这个通知,也就是第2次会失效。不知道是不是我的原因。

AVAudioSessionInterruptionNotification,我到时候再认真测试一下,家里那台电脑发布的又没这个问题,但是在公司的发布的又有问题。

现在遇到另外的问题,就是死锁的问题,Android下面,有时候会出现这个信息,然后界面就卡住了:
frameworks/wilhelm/src/android/AudioPlayer_to_android.cpp:779: pthread 0x75f14a00 (tid 13774) sees object 0x75f13328 was locked by pthread 0x706d2278 (tid 13727) at frameworks/wilhelm/src/itf/IObject.c:411

当然,ios平台下面,也有锁住的问题,就是AudioEngine-inl.mm的update 方法中_threadMutex.try_lock()然后跟_play2d方法中的_threadMutex.lock()竞争,造成死锁。原因是update 方法中_threadMutex.try_lock()的里面有个回调,然后回调里面又调用了play2d播放新的音频,而这时还没进入update 方法中_threadMutex.unlock(),就会死锁。当然,也是偶尔才会出现这样,因为只有_toRemoveAudioIDs有数据时,并且多线程刚好 运行到锁的时候才会出现。

现在ios的还好,android的比较麻烦,完全没下手的地方,更新cocos2d-x 4.0的来测试也一样会出现。看他好像调了NDK,也更新了版本,还是不行。

— Begin quote from ____

引用第6楼ioszqq于2015-02-13 21:17发表的 回 5楼(abc88798) 的帖子 :
感谢通知,不过测试了下,好像第一次按home键是没问题,接收到了AVAudioSessionInterruptionNotification通知,但第二次再按home键就不会再接收到这个通知,也就是第2次会失效。不知道是不是我的原因。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=284560&pid=1244237

— End quote

这个问题找到了,是我在这个场景中调用了CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic这个方法,用了这个,AVAudioSessionInterruptionNotification通知就会没了。再次感谢跟进问题的各位版主跟及时修复问题的技术大牛。提前祝各位新春快乐,事业蒸蒸日上。

解决就好了~

你好,请问你在android上遇到的new audio engin卡死的问题是怎么解决的呢?

楼主,卡屏假死的问题怎么解决?我估计是播放声音互相回调,导致死循环了。就是不知道怎么下手去解决?

不好意思,现在才看到,安卓的我也没解决的,解决的是iOS的。安卓的现在也很头疼。只要频繁停止声音跟播放声音,就会出现卡死。

请问经常提示这个错误 cocos2d::experimental::AudioPlayer::play2d(cocos2d::experimental::AudioCache *):alSourcePlay error code:a004
声音有时候能播 有时候播不出来 是怎么回事