c++ - 播放声音时 FMOD 泄漏

标签 c++ audio fmod

我正在做一个小游戏,添加声音会很好......

但是我泄露了很多,即使我试图删除所有内容并在互联网上查找信息......

这是我的代码:

#include "../../api/inc/fmod.hpp"
#include "../../api/inc/fmod_errors.h"                                                                                                                                                       
#include <iostream>
#include <string>

int     main()
{
  FMOD::System *system = NULL;
  FMOD::System_Create(&system);
  system->init(100, FMOD_INIT_NORMAL, 0);

  FMOD::Channel *channel = NULL;
  FMOD::Sound *sound = NULL;

  while(true)
    {
      system->createSound("music.waw", FMOD_DEFAULT, FMOD_DEFAULT ,&sound);

      FMOD_RESULT result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);

      system->update();
    }
  system->release();                                                                                                                                                                          
  system = NULL;
  delete (system);
  delete (sound);
  delete (channel);
  return (0);
}

我很担心,因为如果我玩游戏的时间足够长,我会完全填满我的内存......
我该怎么办?
我究竟做错了什么?

最佳答案

您需要在播放完毕后释放声音:

system->createSound("music.waw", FMOD_DEFAULT, FMOD_DEFAULT ,&sound);
FMOD_RESULT result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);
system->update();
sound->release();

如果您打算大量重复使用声音,您可能会考虑只加载一次并保留它的内存。

关于c++ - 播放声音时 FMOD 泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24195008/

相关文章:

c++ - 使用前重置成员变量

java - 创建Java回声效果

ios - 在 WebRTC for iOS 中测量麦克风电平

audio - 是否可以使用结束的声音文件过渡到新场景或刷新同一场景中的数据?

audio - FMOD 如何在一些自定义 channel 组中设置一组事件?

c++ - 麻烦用 true 初始化 boolean 数组

c++ - 类型限定符出现在多个项目声明中(表现出指针的奇怪行为)

c++ - 如何在 3D 物体(如球体)上绘制文字

c# - 使用FMOD查找以Hz为单位的频率

.net - 在 .NET 中播放音频媒体的库?