一Cocos2D-X中的音频文件

1.音频文件简介

无损格式/有损格式

1>.WAV

是目前最流行的一种无损压缩格式,但是比较大,不适合内存比较小的设备使用

2>,MP3

是非常流行的格式,但是是有损压缩格式,会去掉一部分人耳无法听到的声音,使用MPEG Audio Layer 3 技术压缩,可达到1:10的压缩率.

3>.WMA

微软发布的格式,有损压缩,在某些情况下比MP3要更好一点.

4>.CAFF

苹果发布的一种无压缩格式

5>.AIFF

专业音频格式,用于IOS系统

6>.MID

不常用.

7>.OGG

没有专利限制的格式,正在逐步广泛使用.安卓平台推荐,体积小.

2Cocos2D-X跨平台 音频支持
  1. 背景音乐
  2. 即时音效

二 使用音频引擎

class EXPORT_DLL SimpleAudioEngine 

{

public: 

// 获取类的实例 

static SimpleAudioEngine* getInstance(); 

// 获取类的实例 

CC_DEPRECATED_ATTRIBUTE static SimpleAudioEngine* sharedEngine() { return 

SimpleAudioEngine::getInstance(); } 

static void end(); 

/* 处理背景音乐相关函数 */ 

// 预加载 

virtual void preloadBackgroundMusic(const char* filePath); 

// 播放virtual void playBackgroundMusic(const char* filePath, bool loop = false); 

// 停止 

virtual void stopBackgroundMusic(bool releaseData = false); 

// 暂停 

virtual void pauseBackgroundMusic(); 

// 继续 

virtual void resumeBackgroundMusic(); 

// rewind 

virtual void rewindBackgroundMusic(); 

virtual bool willPlayBackgroundMusic(); 

// 是否在播放背景音乐 返回值:是否在播放 

virtual bool isBackgroundMusicPlaying(); 

// 获取背景音乐音量 

virtual float getBackgroundMusicVolume(); 

// 设置背景音乐音量 

virtual void setBackgroundMusicVolume(float volume); 

/* 处理即时音效相关函数 */ 

// 获取即时音效音量 

virtual float getEffectsVolume(); 

// 设置即时音效音量 

virtual void setEffectsVolume(float volume); 

// 播放 

virtual unsigned int playEffect(const char* filePath, bool loop = false, 

	float pitch = 1.0f, float pan = 0.0f, float gain = 1.0f); 

// 暂停指定音效 

virtual void pauseEffect(unsigned int soundId); 

// 暂停所有音效 

virtual void pauseAllEffects(); 

// 继续指定音效 

virtual void resumeEffect(unsigned int soundId); 

// 继续所有音效 

virtual void resumeAllEffects(); 

// 停止指定音效 

virtual void stopEffect(unsigned int soundId); 

// 停止所有音效 

virtual void stopAllEffects(); 

// 预处理 

virtual void preloadEffect(const char* filePath); 

virtual void unloadEffect(const char* filePath); 

protected: 

SimpleAudioEngine(); 

virtual ~SimpleAudioEngine(); 

};

使用音频引擎时,需要:

#include “SimpleAudioEngine.h”

using namespace CocosDenshion;一 音频文件的预处理

预处理的代码,写在哪里比较好?

二 播放背景音乐

背景音乐的播放代码,写到哪里比较合适?

1 init函数

2 onEnter函数

// 预处理背景音乐 
SimpleAudioEngine::getInstance()->preloadBackgroundMusic("sound\\backmusic1.mp3"); 
// 预处理即时音效 
CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound\\item.wav"); 
// 没有使用命名空间就必须加上 CocosDenshion:: 在类名前面 
bool AppDelegate::applicationDidFinishLaunching() 
{ 
	// ... ... 
	director->runWithScene(myLoadScene); 
	// 预处理背景音乐 
	SimpleAudioEngine::getInstance()->preloadBackgroundMusic("sound\\backmusic1.mp3"); 
	// 预处理即时音效 
	CocosDenshion::SimpleAudioEngine::getInstance()- >preloadEffect("sound\\item.wav"); 
	// ... ... 
	return true; 
} 
// 播放背景音乐 
SimpleAudioEngine::getInstance()->playBackgroundMusic("sound\\backmusic1.mp3", true); 
// 播放即时音效 
SimpleAudioEngine::getInstance()->playEffect("sound\\item.wav", true); 
virtual bool init() override; 
virtual void onEnter() override;

virtual void onEnterTransitionDidFinish()override;
3 onEnterTransitionDidFinish函数

推荐

三 停止背景音乐

背景音乐的停止代码,写到哪里比较合适?

1 onExit函数**

2 onExitTransitionDidStart函数**

3 cleanup函数**

推荐

四 暂停和继续背景音乐

SimpleAudioEngine::getInstance()->stopBackgroundMusic(); 

SimpleAudioEngine::getInstance()->stopBackgroundMusic("sound\\backmusic1.mp3"); 

virtual void onExit()override; 

virtual void onExitTransitionDidStart()override; 

virtual void cleanup()override; 

// 暂停背景音乐 

SimpleAudioEngine::getInstance()->pauseBackgroundMusic(); 

// 继续背景音乐 

SimpleAudioEngine::getInstance()->resumeBackgroundMusic(); 

void AppDelegate::applicationDidEnterBackground() { 

	Director::getInstance()->stopAnimation(); 

	// if you use SimpleAudioEngine, it must be pause 

	// SimpleAudioEngine::getInstance()->pauseBackgroundMusic(); 

}

void AppDelegate::applicationWillEnterForeground() { 

	Director::getInstance()->startAnimation(); 

	// if you use SimpleAudioEngine, it must resume here 

	// SimpleAudioEngine::getInstance()->resumeBackgroundMusic(); 
}