同时播放同一个多个长音效崩溃

void AudioEngineImpl::play2dImpl(AudioCache *cache, int audioID) {

//Note: It may be in sub thread or main thread :(

if (!*cache->_isDestroyed && cache->_state == AudioCache::State::READY) {

    _threadMutex.lock();

    auto playerIt = _audioPlayers.find(audioID);

    if (playerIt != _audioPlayers.end()) {

        // Trust it, or assert it out.

        bool res = playerIt->second->play2d();

        CC_ASSERT(res);

    }

    _threadMutex.unlock();

} else {

    ALOGD("AudioEngineImpl::play2dImpl, cache was destroyed or not ready!");

    auto iter = _audioPlayers.find(audioID);

    if (iter != _audioPlayers.end()) {

        iter->second->_removeByAudioEngine = true;

    }

}

}

还有我多次遇到 在这个函数触发断言 CC_ASSERT(res); 播放音效返回的值非法。

https://github.com/cocos/cocos-engine/pull/17138 Cocos 385有修复IOS audio一些问题,可以先合并测试下。

我合并这个,还是必崩溃。

可能多线程环境下,缓冲区可能被其他线程释放或重用,从而导致调用alBufferData填充数据时,报错崩溃。 所以在调用 alIsBuffer(bid) 验证缓冲区 ID 是否有效. 如果无效则break避免报错崩溃。

嗯嗯,后续我们有引擎修复的pr?

会修复的。等建立好,我发出来

期待你们早日确定并解决。

你好啊,我这也遇到了iOS崩溃,TF的崩溃是显示在OpenAL,咱们这是一个问题吗? 我也是3.8.3CocosGame-2025-11-17-164947.zip (9.0 KB)

是一个问题吗? 我这也遇到了 iOS音频的崩溃 版本 3.8.3 CocosGame-2025-11-17-164947.zip (9.0 KB)

看着是,可以尝试按照我改的试试

您意思是您已经解决了这个问题了吗? 如果解决了,还望大佬指点一下怎么解决的。 还是说按照您给的必现的方式复现

这是他的连接…

感谢,的确是这个问题,不闪退了

感谢大佬,就是这个问题,已经解决了

1赞

这个是要改.mm文件吗
mac os 怎么改源码啊 求教

下载Cocos的引擎代码,项目里可以指定的,在设置里。让然后修改上面大佬说的 C++的文件

mac os 修改完原生代码 也是点击 编译引擎吗 还是说 自定义引擎代码

3.8.8 也崩在这里了 :confused:

1赞


我是这个崩溃