android7 上播放声音严重卡顿

[quote=“dumganhar, post:13, topic:44119”]
ndroid-speci
[/quote]在git上的external目录下并没有android-specific目录啊

python download-deps.py
之后就有了

audioengine这个东西能不用就不用,我项目用了audioengine后出现各种兼容性问题,从audioengine一出生到现在就一直没好过,我已经怕了,android平台还是老老实实的用原生的SoundPool吧,稳定性比啥都重要啊!!!

1赞

请问这个错不太明白,另外请问PcmAudioPlayer播放小容量音频的作用是什么呢?用UrlAudioPlayer播放这些小容量音频是不是会出现什么问题?@dumganhar 谢谢。。。

simple那个我开始也用了,但是似乎问题更多呢,因为我们做的这个需要播放大量音效,用simple会经常出现卡屏什么的

你可能用的早期的引擎,我记得某个引擎版本是用clang,后来发现有问题,又切换回gcc了。
你可以修改tools/cocos2d-console/plugins/plugin_compile/build_android.py文件,

    def get_toolchain_version(self, ndk_root, compile_obj):
        # it should be possible to override the toolchain
        if 'NDK_TOOLCHAIN_VERSION' in os.environ:
            return os.environ['NDK_TOOLCHAIN_VERSION']
        return '4.9'

改成强制使用gcc 4.9来编译。

SimpleAudio在Android平台的问题确实也很多,因为里面限制了最大同时播放音频的数量,而且还有各种奇奇怪怪的问题,不过主要问题是cocos没封装好,但是是没有出现严重的兼容性问题的,如果有能力,建议自己去封装SoundPool,自己写的代码,哪里出问题就改哪里。

改成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来解码的。