在工程目录中有一对音频文件: 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。
在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 |