一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跨平台 音频支持
- 背景音乐
- 即时音效
二 使用音频引擎
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();
}