- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
目前,我正在尝试使用 FMOD 设计一个声音播放器。我想实现只使用一个 Sound 指针的目标,但最终在多次调用 createStream 时内存使用量不断增加。无论如何不使用多个声音指针来改进它吗?
声音类.h
#ifndef _SOUNDCLASS_H_
#define _SOUNDCLASS_H_
//////////////
// INCLUDES //
//////////////
#include "FMOD/fmod.hpp"
using namespace FMOD;
////////////////////////////////////////////////////////////////////////////////
// Class name: SoundClass
////////////////////////////////////////////////////////////////////////////////
class SoundClass
{
public:
SoundClass();
~SoundClass();
bool Initialize();
float Load( const int& trackNo );
void Play();
void Stop();
void Pause();
void Resume();
void Next( int& trackNo, float& totalTrackLength );
void Previous( int& trackNo, float& totalTrackLength );
private:
bool m_isFirstRun;
bool m_isLoad;
bool m_isPlay;
int m_currentTrackNo;
unsigned int* m_trackLength;
FMOD_RESULT result;
System* fmodSystem;
Channel* fmodChannel;
Sound* track;
};
#endif
声音类.cpp
#include "SoundClass.h"
SoundClass::SoundClass()
{
fmodSystem = 0;
track = 0;
fmodChannel = 0;
m_isFirstRun = true;
m_isLoad = true;
m_isPlay = true;
m_currentTrackNo = 0;
m_trackLength = new unsigned int;
}
SoundClass::~SoundClass()
{
/*
Cleaning up...
*/
track->release();
fmodSystem->release();
}
bool SoundClass::Initialize()
{
/*
Setup FMOD for your application.
*/
// Create a FMOD system.
result = System_Create( &fmodSystem );
// Similar to HRESULT, FMOD use FMOD_RESULT to keep track of the execution result.
if ( result != FMOD_OK )
{
return false;
}
// Alternately, you can check for the availability of the system.
if ( !fmodSystem )
{
return false;
}
// Initialize FMOD.
result = fmodSystem->init( 100, FMOD_INIT_NORMAL, 0 );
if ( result != FMOD_OK )
{
return false;
}
return true;
}
float SoundClass::Load( const int& trackNo )
{
/*
Load a sound file.
*/
// FMOD sound source.
switch ( trackNo )
{
case 0:
fmodSystem->createStream( "resources/audio/01.ogg", FMOD_DEFAULT, 0, &track );
break;
case 1:
fmodSystem->createStream( "resources/audio/02.ogg", FMOD_DEFAULT, 0, &track );
break;
case 2:
fmodSystem->createStream( "resources/audio/03.ogg", FMOD_DEFAULT, 0, &track );
break;
case 3:
fmodSystem->createStream( "resources/audio/04.ogg", FMOD_DEFAULT, 0, &track );
break;
case 4:
fmodSystem->createStream( "resources/audio/05.ogg", FMOD_DEFAULT, 0, &track );
break;
case 5:
fmodSystem->createStream( "resources/audio/06.ogg", FMOD_DEFAULT, 0, &track );
break;
case 6:
fmodSystem->createStream( "resources/audio/07.ogg", FMOD_DEFAULT, 0, &track );
break;
case 7:
fmodSystem->createStream( "resources/audio/08.ogg", FMOD_DEFAULT, 0, &track );
break;
case 8:
fmodSystem->createStream( "resources/audio/09.ogg", FMOD_DEFAULT, 0, &track );
break;
case 9:
fmodSystem->createStream( "resources/audio/10.ogg", FMOD_DEFAULT, 0, &track );
break;
}
m_currentTrackNo = trackNo;
track->getLength( m_trackLength, FMOD_TIMEUNIT_MS );
return (float)*m_trackLength / 1000;
}
void SoundClass::Play( )
{
// Play sound on a channel
fmodSystem->playSound( FMOD_CHANNEL_REUSE, track, false, &fmodChannel );
}
void SoundClass::Stop()
{
fmodChannel->stop();
}
void SoundClass::Pause()
{
fmodChannel->setPaused( true );
}
void SoundClass::Resume()
{
fmodChannel->setPaused( false );
}
void SoundClass::Next( int& trackNo, float& totalTrackLength )
{
if ( m_currentTrackNo != 9 )
{
totalTrackLength = Load( m_currentTrackNo + 1 );
trackNo = m_currentTrackNo;
Play();
}
}
void SoundClass::Previous( int& trackNo, float& totalTrackLength )
{
if ( m_currentTrackNo != 0 )
{
totalTrackLength = Load( m_currentTrackNo - 1 );
trackNo = m_currentTrackNo;
Play();
}
}
最佳答案
一个小的内存泄漏是您有 m_trackLength
是 new
-ed 而不是 delete
-d。不过,可能还有其他因素在起作用。
关于c++ - FMOD - 多次调用 createStream 时内存使用量不断增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19345412/
我希望有人能解释为什么我的应用程序在加载时使用不同数量的 RAM。我说的是直接使用 exe 的编译版本。这是一个非常基本的应用程序,在应用程序的启动中没有条件分支。然而,每次我启动它时,RAM 量都在
我有一个 inode 使用率为 100% 的磁盘驱动器(使用 df -i 命令)。但是在大量删除文件后,使用率仍然是 100%。 那么正确的做法是什么? 磁盘空间使用量较少的磁盘驱动器怎么可能有Ino
假设我与分支有一个智能合约,其中每个分支都有不同数量的操作。 if (someCondition) { // do operations costing 10 gas } else { //d
是否有一种工具可以在提交到 NEAR 网络之前估算合约调用将产生多少 gas? 最佳答案 目前最好的估计是用runtime-standalone ,它可以处理交易而不必担心共识/网络。这意味着您可以创
我正在使用最新的 SDK 开发适用于 Windows Azure 的应用程序。 目前我正在使用缓存实现 session 提供程序,但模拟器完全不成比例: 缓存被实现为“非常小的”辅助角色(最大 768
我正在为我的 Logstash RAM 问题寻找答案,因为它几乎是 100%。我为它做了很多搜索,但他们没有为我工作。下面的代码是我的 logstash.conf 文件。我认为它需要一些小改动。 Lo
我已经阅读了这里有关此问题的所有其他问题以及互联网其他地方的许多文章。根据this site ,最大内存使用量遵循以下公式: Max memory = [-Xmx] + [-XX:MaxPermSiz
我需要以编程方式增加 Android 中的 RAM 使用量,以观察它随时间的变化。我该怎么做? 我尝试生成很多自定义对象,但生成后意外地 RAM 使用量减少了...我更改了对象数量、结构等,但没有任何
我们使用带有 MMFiles 存储引擎的 ArangoDB 3.3.14(社区版)来处理相对较大的数据集(备份时会超过 30 GB)。我们使用 ECS 在 Docker 容器内运行它。我们的主机虚拟机
我收到了 Hostgator 发来的一条说明,表明他们限制了我对 MYSQL 的访问,因为我的网站使用了太多资源。 通常,在这种情况下,我只会恢复备份以查看最近的更改是否会产生错误。但是,除了写了一些
我使用 TMimeMess 来解码基于 SMTP 服务器的传入电子邮件在突触上。 我发现用于解码 50MB MIME 消息(带有附件),TMimeMess 使用了 600-800MB 的内存。 在这里
我正在打包适用于 iOS 和 Android 的 Adobe Air 应用程序,并且我的 (RAM) 内存使用量超过 100MB。我的游戏(RPG)中有大量 Assets 。 Assets 的数量
我是一名优秀的程序员,十分优秀!