我目前正在使用 FMODEx 4.40.10。我们像这样加载 OGG 样本:
uint uiFlags(FMOD_SOFTWARE | FMOD_LOWMEM | FMOD_CREATESAMPLE);
FMOD::SOUND* pSound(NULL);
m_pFMODSystem->createSound(sPath, uiFlags, NULL, &pSound);
通过以下方式查看此声音的内存使用情况时:
FMOD_MEMORY_USAGE_DETAILS usage;
pSound->getMemoryInfo(FMOD_MEMBITS_ALL, 0, NULL, &usage);
usage.codec 报告大于 0。这对我来说没有意义,因为 FMOD 文档指出 FMOD_MEMORY_USAGE_DETAILS::codec 是:
codec
[out] Codecs allocated for streaming
从声音的加载方式可以看出,应该没有流式传输。
加载多个 OGG 文件后,当我查询系统的内存使用情况时,它显示编解码器数量很大 - 所有单个文件编解码器的使用情况加在一起。FMOD 报告的内存数量与我从自己的内存分析中看到的内存使用情况相匹配。
当我加载原始 PCM 数据时,usage.codec 报告为 0。
为什么我在加载非流式 OGG 文件时“编解码器”大于 0?有没有办法禁用这种内存使用?
编辑:作为测试,加载 OGG 后,我提取 PCM 数据并让 FMOD 创建一个新声音。然后我释放 OGG 发出的声音,并用从 PCM 数据加载的新声音替换它。这完美无缺。这进一步证明它分配的编解码器内存是不必要的。