如何用双簧管加载多个声音

How to load multiple sound with Oboe

当我尝试加载超过 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 个声音才能同时播放它们。 我可以帮忙吗?

很难在没有看到完整的堆栈跟踪和源代码的情况下调试您的代码(您可以 post 一个 link 到一个 github 项目吗?),但是,最有可能原因是你在 dereferencing a null pointer 某处。

一些可能的原因:

  1. 您确定 kMaxTracks 足够高吗?你有一个 16x19 的二维数组,相当于 304 个可能的玩家。添加超过 kMaxTracks 个轨道将导致未定义的行为。
  2. Player个对象都创建成功了吗?如果不是,则源文件或加载过程有问题。
  3. 这些文件有多大?您可能 运行 内存不足。