如何用双簧管加载多个声音
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 某处。
一些可能的原因:
- 您确定
kMaxTracks
足够高吗?你有一个 16x19 的二维数组,相当于 304 个可能的玩家。添加超过 kMaxTracks
个轨道将导致未定义的行为。
Player
个对象都创建成功了吗?如果不是,则源文件或加载过程有问题。
- 这些文件有多大?您可能 运行 内存不足。
当我尝试加载超过 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 某处。
一些可能的原因:
- 您确定
kMaxTracks
足够高吗?你有一个 16x19 的二维数组,相当于 304 个可能的玩家。添加超过kMaxTracks
个轨道将导致未定义的行为。 Player
个对象都创建成功了吗?如果不是,则源文件或加载过程有问题。- 这些文件有多大?您可能 运行 内存不足。