1

当我尝试加载超过 90 到 100 种声音时,双簧管出现问题,应用程序崩溃:

Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 32081 (AudioTrack), pid 32003

我已经测试了只玩其中一个并且一切正常。只有当我尝试加载大量文件时它才会崩溃。为了加载所有这些,我只是用户一个 Player 数组:

std::array<std::array<std::unique_ptr<Player>, 16>,19> mSoundKit;

mSoundKit[instrument][intensity] = std::make_unique<Player>(mClapSource);

mMixer.addTrack(mSoundKit[instrument][intensity].get());

我尝试升级应用程序的 maxTracks :

constexpr uint8_t kMaxTracks = 255;

但是我现在加载超过 130-140 个声音时崩溃了

与 renderAudio 相同的崩溃:

mTracks[i]->renderAudio(mixingBuffer, numFrames);

来自 AudioReady:

mMixer.renderAudio(outputBuffer+(oboeStream->getChannelCount()*i), 1);

我做错了什么?

我必须同时加载 230 240 个声音才能播放它们。请问我可以帮忙吗?

4

1 回答 1

0

在没有看到完整的堆栈跟踪和源代码的情况下调试代码是很困难的(您可以发布一个 github 项目的链接吗?),但是,最可能的原因是您在某处取消引用空指针。

一些可能的原因:

  1. 你确定kMaxTracks够高吗?您有一个 16x19 的 2D 阵列,相当于 304 个可能的玩家。添加多个kMaxTracks轨道将导致未定义的行为。
  2. Player对象都创建成功了吗?如果不是,则您的源文件或加载过程存在问题。
  3. 这些文件有多大?您可能内存不足。
于 2019-08-05T17:11:21.143 回答