android7 上播放声音严重卡顿

改成4.9也不行。。还是一样的错误,是不是跟我用的NDK-r9c有关。。:sweat:

有可能,r9c太老了,你换成r10e看看。

搞错了,可以正常编过了,改的位置是application.mk的NDK_TOOLCHAIN_VERSION

@dumganhar ios 用的3.13版本的,声音崩溃,求指教一下 谢谢了:7:
AudioToolbox _CrashIfClientProvidedBogusAudioBufferList + 56
1 AudioToolbox AudioConverterConvertComplexBuffer + 280
2 AudioToolbox AUSpatialMixer::Render(unsigned int&, AudioTimeStamp const&, unsigned int) + 2784
3 AudioToolbox AUBase::DoRenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, AUOutputElement*, unsigned int, AudioBufferList&) + 172
4 AudioToolbox AUBase::DoRender(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int, AudioBufferList&) + 432
5 AudioToolbox AUMethodRender(void*, unsigned int*, AudioTimeStamp const*, unsigned int, unsigned int, AudioBufferList*) + 44
6 AudioToolbox AUInputElement::PullInput(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int) + 140
7 AudioToolbox AUInputFormatConverter2::InputProc(OpaqueAudioConverter*, unsigned int*, AudioBufferList*, AudioStreamPacketDescription**, void*) + 216
8 AudioToolbox AudioConverterChain::CallInputProc(unsigned int) + 412
9 AudioToolbox AudioConverterChain::FillBufferFromInputProc(unsigned int*, CABufferList*) + 148
10 AudioToolbox BufferedAudioConverter::GetInputBytes(unsigned int, unsigned int&, CABufferList const*&) + 180
11 AudioToolbox CBRConverter::RenderOutput(CABufferList*, unsigned int, unsigned int&, AudioStreamPacketDescription*) + 100
12 AudioToolbox BufferedAudioConverter::FillBuffer(unsigned int&, AudioBufferList&, AudioStreamPacketDescription*) + 564
13 AudioToolbox AudioConverterChain::RenderOutput(CABufferList*, unsigned int, unsigned int&, AudioStreamPacketDescription*) + 116
14 AudioToolbox BufferedAudioConverter::FillBuffer(unsigned int&, AudioBufferList&, AudioStreamPacketDescription*) + 564
15 AudioToolbox AudioConverterFillComplexBuffer + 328
16 AudioToolbox AUInputFormatConverter2::PullAndConvertInput(AudioTimeStamp const&, unsigned int&, AudioBufferList&, AudioStreamPacketDescription*, bool&) + 120
17 AudioToolbox AUConverterBase::RenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int) + 644
18 AudioToolbox AURemoteIO::RenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int) + 84
19 AudioToolbox AUBase::DoRenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, AUOutputElement*, unsigned int, AudioBufferList&) + 172
20 AudioToolbox AUBase::DoRender(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int, AudioBufferList&) + 432
21 AudioToolbox AURemoteIO::PerformIO(unsigned int, unsigned int, unsigned int, AudioTimeStamp const&, AudioTimeStamp const&, AudioBufferList const*, AudioBufferList*, int&) + 752
22 AudioToolbox _AURIOCallbackReceiver_PerformIO + 564
23 AudioToolbox __XPerformIO + 104
24 AudioToolbox _mshMIGPerform + 244
25 AudioToolbox _MSHMIGDispatchMessage + 36
26 AudioToolbox AURemoteIO::IOThread::Run() + 312
27 AudioToolbox AURemoteIO::IOThread::Entry(void*) + 12
28 AudioToolbox CAPThread::Entry(CAPThread*) + 84
29 libsystem_pthread.dylib __pthread_body + 240
30 libsystem_pthread.dylib __pthread_body

这个问题是在什么情况下出现的?有没有好的重现方法?

此问题在
https://github.com/cocos2d/cocos2d-x/pull/17500

https://github.com/cocos2d/cocos2d-x/pull/17518
中修复了

:relaxed: thx

我项目是3.14.1的,我把3.15.1的cocos/audio全部覆盖了,也添加了external/android-specific,编译跑起来感觉没有什么变化,没有preload第一次播放音效也是很卡,部分卡一秒才能播放,sigh

测试机是小米6 miui8.5.4.0 稳定版

也参考了这个帖子
http://forum.cocos.com/t/android7-0/44784/2

你是用AudioEngine还是SimpleAudioEngine播放音频?

我用的是play2d的接口,应该就是audioengine吧

09-07 11:50:15.861: V/AudioPlayerProvider(1319): (assets/res/gameres/module/ddz/sound/effect/0/effect_0_jiaodizhu.mp3) file size: 7523
09-07 11:50:15.861: V/AudioPlayerProvider(1319): FileInfo (0xd720d010), Waiting preload (assets/res/gameres/module/ddz/sound/effect/0/effect_0_jiaodizhu.mp3) to finish …
09-07 11:50:15.861: V/AudioPlayerProvider(1319): AudioPlayerProvider::preloadEffect: (assets/res/gameres/module/ddz/sound/effect/0/effect_0_jiaodizhu.mp3)
09-07 11:50:15.862: V/AudioDecoder(1319): Play callback registered
09-07 11:50:15.884: I/OMXClient(1319): MuxOMX ctor
09-07 11:50:15.890: I/(1319): Successfully allocated codec ‘OMX.google.mp3.decoder’
09-07 11:50:15.914: V/AudioDecoder(1319): Content duration is 940ms
09-07 11:50:15.914: V/AudioDecoder(1319): key[0] size=28, name=AndroidPcmFormatNumChannels, value size=32
09-07 11:50:15.914: V/AudioDecoder(1319): key[1] size=27, name=AndroidPcmFormatSampleRate, value size=32
09-07 11:50:15.914: V/AudioDecoder(1319): key[2] size=30, name=AndroidPcmFormatBitsPerSample, value size=32
09-07 11:50:15.914: V/AudioDecoder(1319): key[3] size=30, name=AndroidPcmFormatContainerSize, value size=32
09-07 11:50:15.914: V/AudioDecoder(1319): key[4] size=28, name=AndroidPcmFormatChannelMask, value size=32
09-07 11:50:15.915: V/AudioDecoder(1319): key[5] size=27, name=AndroidPcmFormatEndianness, value size=32
09-07 11:50:15.915: V/AudioDecoder(1319): Key AndroidPcmFormatNumChannels is at index 0
09-07 11:50:15.915: V/AudioDecoder(1319): Key AndroidPcmFormatSampleRate is at index 1
09-07 11:50:15.915: V/AudioDecoder(1319): Key AndroidPcmFormatBitsPerSample is at index 2
09-07 11:50:15.915: V/AudioDecoder(1319): Key AndroidPcmFormatContainerSize is at index 3
09-07 11:50:15.915: V/AudioDecoder(1319): Key AndroidPcmFormatChannelMask is at index 4
09-07 11:50:15.915: V/AudioDecoder(1319): Key AndroidPcmFormatEndianness is at index 5
09-07 11:50:15.915: V/AudioDecoder(1319): Starting to decode
09-07 11:50:15.963: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:15.963: V/AudioDecoder(1319): Content duration is 940ms (in dec callback)
09-07 11:50:15.976: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:15.976: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:15.988: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.001: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.002: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.018: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.029: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.031: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.042: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.053: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.062: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.074: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.086: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.086: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.097: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.111: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.111: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.125: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.137: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.137: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.157: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.164: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.164: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.172: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.179: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.179: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.188: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.199: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.199: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.212: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.225: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.226: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.239: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.252: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.252: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.263: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.276: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.276: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.290: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.301: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.321: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.327: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.329: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.329: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.334: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.336: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.336: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.337: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.339: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.339: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.340: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.340: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.341: V/AudioDecoder(1319): decodeToPcmCallback …
09-07 11:50:16.341: V/AudioDecoder(1319): SL_PLAYEVENT_HEADATEND
09-07 11:50:16.341: V/AudioDecoder(1319): EOS signaled
09-07 11:50:16.341: V/AudioDecoder(1319): Stopped decoding
09-07 11:50:16.348: V/AudioDecoder(1319): After destroy player …
09-07 11:50:16.348: I/AudioDecoder(1319): Original audio info: numChannels: 1, sampleRate: 22050, bitPerSample: 16, containerSize: 16, channelMask: 1, endianness: 2, numFrames: 20736, duration: 0.940000, total size: 41472
09-07 11:50:16.348: V/AudioDecoder(1319): Resample: 22050 --> 48000
09-07 11:50:16.348: V/AudioResampler(1319): resampler load 0 -> 6 MHz due to delta +6 MHz from quality 2
09-07 11:50:16.348: V/AudioResampler(1319): Create cubic Resampler
09-07 11:50:16.349: V/AudioDecoder(1319): resample() 45139 output frames
09-07 11:50:16.357: V/AudioDecoder(1319): outFrames: 90278
09-07 11:50:16.358: V/AudioDecoder(1319): resample() complete
09-07 11:50:16.358: V/AudioDecoder(1319): reset() complete
09-07 11:50:16.358: V/AudioResampler(1319): resampler load 6 -> 0 MHz due to delta -6 MHz from quality 2
09-07 11:50:16.370: V/AudioDecoder(1319): pcm buffer size: 90278
09-07 11:50:16.401: V/AudioDecoder(1319): Decoding (assets/res/gameres/module/ddz/sound/effect/0/effect_0_jiaodizhu.mp3) to pcm data wasted 540.109985ms
09-07 11:50:16.401: V/AudioPlayerProvider(1319): decode succeed.
09-07 11:50:16.401: V/AudioPlayerProvider(1319): preload (assets/res/gameres/module/ddz/sound/effect/0/effect_0_jiaodizhu.mp3) callback count: 1
09-07 11:50:16.401: V/AudioPlayerProvider(1319): FileInfo (0xd720d010), Set isSucceed flag: 1, path: assets/res/gameres/module/ddz/sound/effect/0/effect_0_jiaodizhu.mp3
09-07 11:50:16.402: V/AudioDecoder(1319): ~AudioDecoder() 0xd2fb2768
09-07 11:50:16.402: V/AudioDecoder(1319): After destroying SL play object
09-07 11:50:16.402: V/AudioDecoder(1319): Closing assetFd: 78
09-07 11:50:16.402: V/AudioPlayerProvider(1319): FileInfo (0xd720d010), Waitup preload (assets/res/gameres/module/ddz/sound/effect/0/effect_0_jiaodizhu.mp3) …
09-07 11:50:16.402: V/PcmAudioPlayer(1319): PcmAudioPlayer constructor: 0xcbe5f8f0
09-07 11:50:16.402: V/AssetFd(1319): ~AssetFd: 77
09-07 11:50:16.402: V/PcmAudioPlayer(1319): PcmAudioPlayer (0xcbe5f8f0) play (assets/res/gameres/module/ddz/sound/effect/0/effect_0_jiaodizhu.mp3) …
09-07 11:50:16.403: D/cocos2d-x debug info(1319): [LUA-print] [TRACE]什么情况2 0.54224109649658 res/gameres/module/ddz/sound/effect/0/effect_0_jiaodizhu.mp3

我贴一部分log上来吧,播放这个音效
effect_0_jiaodizhu.mp3

可以看到0.54224秒才能播放叫地主这个音效。。。有些还卡1.5秒左右

测试代码,tickMgr:getTimer(),是简单的拿时间错接口
local t = tickMgr:getTimer()
local audioId = _engine:play2d(url, isLoop, curVolume, nil);
trace(“什么情况2”, tickMgr:getTimer() - t, url);

Decoding (assets/res/gameres/module/ddz/sound/effect/0/effect_0_jiaodizhu.mp3) to pcm data wasted 540.109985ms
貌似转pcm数据比较慢喔

effect_0_jiaodizhu.mp3.zip (6.8 KB)

音频文件,用mac来压缩zip的,不知道如果用windows解压会如何

对了,忘记说我的ndk r10c

目测你不是用最新的3.15.1中的audio代码。
如果是mp3音频,应该是用AudioDecoderMp3来解码的。

谢谢提醒,原来要把obj目录删掉了,重新编译才行。。。。现在好很多了,大概0.05秒左右解析一个,能接受

1赞

请问下
现在github上的版本是只有5.0的android才使用play2d的接口?
其他版本还是使用cocos2dxsound里面SoundPool的接口?

你看的是simpleaudioengine。
这个是因为5.0 soundpool有卡顿的bug,然后用AudioEngine来实现SimpleAudioEngine的接口。
建议你直接用AudioEngine的接口就好了。