COCOS2D 播放声音

转载自:http://blog.csdn.net/zltianhen/article/details/6743220

在工程目录中有一对音频文件: blues.mp3 和 alien- sfx.caf 。

在cocos2d中播放音频的最好也是最初的方法是用 SimpleAudioEngine。然而音频支持并不是cocos2d内置的一部分。它属于CocosDenshion,就像物理引擎一样。因此,你需要import额外的头文件:

#import "SimpleAudioEngine.h"



然后可以在init方法中象这样来播放音乐/音频:

[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"blues.mp3" loop:YES];

[[SimpleAudioEngine sharedEngine] preloadEffect:@"alien-sfx.caf"];

对于背景音乐,我们设置loop参数为YES,这样就会循环播放。

对于音频声效,我们并没有立即播放,而仅仅是加载到内存。然后在条件合适时播放(比如碰撞发生时):

[[SimpleAudioEngine sharedEngine] playEffect:@"alien-sfx.caf"];

对于音乐,最好使用mp3格式。注意,同一时间内,只能播放1首背景音乐。虽然同时播放多首mp3从技术上是可行的,但物理硬件在同一时间内只能对一首mp3进行解码。在游戏中拒绝任何额外的CPU开销,因此对大部分游戏而言,都不会同时播放多首mp3.

至于声效,我喜欢用CAF格式。如果要进行音频格式的转换,可以使用 SoundConverter:

http://dekorte.com/projects/shareware/SoundConverter/

如果文件大小在500k以内,该软件是免费的,无限制的许可仅仅需要$15。

如果你发现无法播放音频文件或者出现杂音,不要担心。有无数音频软件和音频编码拥有它们特有的文件格式。有些格式无法在iOS设备上播放,然而在其他设备上播放正常。解决办法是打开它们,然后重新保存。或者使用音频转换程序或音频软件。



//1.在当前的场景中设定全局变量
CDSoundSource *myEffect;
SimpleAudioEngine *mySAE;

//2. 在init方法中初始化SimpleAudioEngine并将场景音效都放入缓冲
mySAE=[SimpleAudioEngine sharedEngine];
[mySAE preloadEffect:@"myeffect.caf"];
....

//3. 需要播放音效时这样做
myEffect=[[SAE soundSourceForFile:@"myeffect.caf"] retain];
[myEffect play];

//4. 判断是否播放的时候这样做
if (myEffect.isPlaying)
{
//正在播放
}
else
{
//音效没有播放
}

//5. 需要停止播放的时候这样做
[myEffect stop];

//6. 在场景的dealloc方法中卸载所有被缓冲过的音效,以便释放内存
[myEffect dealloc];
[mySAE unloadEffect:@"myeffect.caf"];
....
....
// 如果背景音乐要带入下一个场景则不要unload,dealloc留给CocosDension去autorelease

你可能感兴趣的:(cocos2d)