http://shahdza.blog.51cto.com/2410787/1545820/
| 背景音乐 | 音效 |
Win32 | MP3、MID、WAV | MID、WAV |
Android | MP3、MID、WAV | OGG |
IOS | MP3、CAF | CAF |
1
2
3
4
|
//
#include "SimpleAudioEngine.h"
using
namespace
CocosDenshion;
//
|
1
2
3
4
|
//
//通过SimpleAudioEngine::sharedEngine()获得
static
SimpleAudioEngine* sharedEngine();
//
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//
void
preloadBackgroundMusic(
'音乐路径const char*'
);
//预加载
void
playBackgroundMusic(
'音乐路径const char*'
,
bool
bLoop =
false
);
//播放,是否循环,默认不循环
void
stopBackgroundMusic(
bool
bReleaseData =
false
);
//停止,是否释放音乐资源
void
pauseBackgroundMusic();
//暂停
void
resumeBackgroundMusic();
//恢复
void
rewindBackgroundMusic();
//重播
//返回是否将要播放背景音乐
bool
willPlayBackgroundMusic();
//返回是否正在播放背景音乐
//注意:暂停也算正在播放,只有停止了才算未播放。
bool
isBackgroundMusicPlaying();
//设置音量,取值范围0~1.0
//查看了内部源码,发现音量的设置没有实现,即音量永远是1.0
float
getBackgroundMusicVolume();
void
setBackgroundMusicVolume(
float
volume);
//
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//
void
preloadEffect(
'音乐路径const char*'
);
//预加载
unsigned
int
playEffect(
'音乐路径const char*'
,
bool
bLoop =
false
);
//播放,返回该音效的ID。是否循环
void
stopEffect(unsigned
int
nSoundId);
//停止指定ID的音效
void
stopAllEffects();
//停止所有音效
void
pauseEffect(unsigned
int
nSoundId);
//暂停指定ID的音效
void
pauseAllEffects();
//暂停所有音效
void
resumeEffect(unsigned
int
nSoundId);
//恢复指定ID的音效
void
resumeAllEffects();
//恢复所有音效
void
unloadEffect(
const
char
* pszFilePath);
//卸载音效资源
//设置音量,取值范围0~1.0
//查看了内部源码,发现音量的设置没有实现,即音量永远是1.0
float
getEffectsVolume();
void
setEffectsVolume(
float
volume);
//
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
//
/**
* 根据平台选择音乐音效的格式
*/
//音效文件
//Android平台只支持OGG的音效格式
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#define EFFECT_FILE "music/effect2.ogg"
#elif( CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
#define EFFECT_FILE "music/effect1.raw"
#else
#define EFFECT_FILE "music/effect1.wav"
#endif
//音乐文件
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#define MUSIC_FILE "music/music.mid"
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_BLACKBERRY || CC_TARGET_PLATFORM == CC_PLATFORM_LINUX )
#define MUSIC_FILE "music/background.ogg"
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
#define MUSIC_FILE "music/background.wav"
#else
#define MUSIC_FILE "music/background.mp3"
#endif
/**
* 预加载音乐音效
*/
//加载背景音乐
SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(MUSIC_FILE);
//加载音效
SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(EFFECT_FILE);
//
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//
float
SimpleAudioEngine::getBackgroundMusicVolume()
{
return
1.0;
}
void
SimpleAudioEngine::setBackgroundMusicVolume(
float
volume)
{
}
float
SimpleAudioEngine::getEffectsVolume()
{
return
1.0;
}
void
SimpleAudioEngine::setEffectsVolume(
float
volume)
{
}
//
|
1
2
3
|
//
SimpleAudioEngine::sharedEngine()->end()
//
|
1
2
3
4
|
//
#include "SimpleAudioEngine.h"
using
namespace
CocosDenshion;
//
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
//
/**
* 根据平台选择音乐音效的格式
*/
//音效文件
//Android平台只支持OGG的音效格式
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#define EFFECT_FILE "music/effect2.ogg"
#elif( CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
#define EFFECT_FILE "music/effect1.raw"
#else
#define EFFECT_FILE "music/effect1.wav"
#endif
//音乐文件
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#define MUSIC_FILE "music/music.mid"
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_BLACKBERRY || CC_TARGET_PLATFORM == CC_PLATFORM_LINUX )
#define MUSIC_FILE "music/background.ogg"
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
#define MUSIC_FILE "music/background.wav"
#else
#define MUSIC_FILE "music/background.mp3"
#endif
/**
* 预加载音乐音效
*/
//加载背景音乐
SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(MUSIC_FILE);
//加载音效
SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(EFFECT_FILE);
//
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
//
//创建控制音乐音效的菜单按钮
std::string testItems[] = {
"play background music"
,
"stop background music"
,
"pause background music"
,
"resume background music"
,
"rewind background music"
,
"is background music playing"
,
"play effect"
,
"play effect repeatly"
,
"stop effect"
,
"pause effect"
,
"resume effect"
,
"pause all effects"
,
"resume all effects"
,
"stop all effects"
,
"unload effect"
,
"add background music volume"
,
"sub background music volume"
,
"add effects volume"
,
"sub effects volume"
};
//创建菜单
CCMenu* pMenu = CCMenu::create();
pMenu->setContentSize(CCSizeMake(480,1000));
for
(
int
i = 0; i < 19; ++i)
{
CCLabelTTF* label = CCLabelTTF::create(testItems[i].c_str(),
"Arial"
, 24);
CCMenuItemLabel* pMenuItem = CCMenuItemLabel::create(label,
this
, menu_selector(HelloWorld::menuCallback));
pMenuItem->setPosition( ccp(mysize.width/2, 1000 - (i+1)*50 ) );
pMenu->addChild(pMenuItem, 0, i);
}
//将菜单作为容器,放入滚动视图中
CCScrollView* scrollView = CCScrollView::create(CCSizeMake(480, 320), pMenu);
scrollView->setDirection(kCCScrollViewDirectionVertical);
scrollView->setPosition(CCPointZero);
pMenu->setPosition( ccp(0, 320-1000) );
this
->addChild(scrollView);
//
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
//
void
HelloWorld::menuCallback(CCObject* sender)
{
//获取菜单按钮编号
int
idx = ((CCMenuItem*)sender)->getTag();
switch
(idx)
{
//音乐控制
case
0: SimpleAudioEngine::sharedEngine()->playBackgroundMusic(MUSIC_FILE,
true
);
break
;
//播放音乐,循环
case
1: SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
break
;
//停止音乐
case
2: SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
break
;
//暂停音乐
case
3: SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
break
;
//恢复音乐
case
4: SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();
break
;
//重播音乐
case
5:
if
(SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying())
//是否正在播放背景音乐
{
CCLOG(
"background music is playing"
);
}
else
{
CCLOG(
"background music is not playing"
);
}
break
;
//音效控制
case
6: m_soundID = SimpleAudioEngine::sharedEngine()->playEffect(EFFECT_FILE);
break
;
//播放音效,不循环
case
7: m_soundID = SimpleAudioEngine::sharedEngine()->playEffect(EFFECT_FILE,
true
);
break
;
//播放音效,循环
case
8: SimpleAudioEngine::sharedEngine()->stopEffect(m_soundID);
break
;
//停止指定ID的音效
case
9: SimpleAudioEngine::sharedEngine()->pauseEffect(m_soundID);
break
;
//暂停指定ID的音效
case
10: SimpleAudioEngine::sharedEngine()->resumeEffect(m_soundID);
break
;
//恢复指定ID的音效
case
11: SimpleAudioEngine::sharedEngine()->pauseAllEffects();
break
;
//暂停所有音效
case
12: SimpleAudioEngine::sharedEngine()->resumeAllEffects();
break
;
//恢复所有音效
case
13: SimpleAudioEngine::sharedEngine()->stopAllEffects();
break
;
//停止所有音效
case
14: SimpleAudioEngine::sharedEngine()->unloadEffect(EFFECT_FILE);
break
;
//卸载音效
//音量控制
case
15:
SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume() + 0.1f);
break
;
case
16:
SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume() - 0.1f);
break
;
case
17:
SimpleAudioEngine::sharedEngine()->setEffectsVolume(SimpleAudioEngine::sharedEngine()->getEffectsVolume() + 0.1f);
break
;
case
18:
SimpleAudioEngine::sharedEngine()->setEffectsVolume(SimpleAudioEngine::sharedEngine()->getEffectsVolume() - 0.1f);
break
;
}
}
//
|