如何播放背景音乐(Cocos2d iOS)

如何播放背景音乐(Cocos2d iOS),ios,cocos2d-iphone,Ios,Cocos2d Iphone,我是Cocos2d框架的新手,我需要在主菜单场景中帮助了解如何在循环中播放.wav文件。另外,我想得到一些关于如何在两个精灵碰撞时播放声音的帮助 谢谢在使用v3之前,您可以在使用音频文件之前的某个时间点预加载音频文件。例如,要预加载背景音乐,您可以(这会为播放做好准备,但不会加载整个内容,而是流式播放): 要玩它,你可以称之为: [[SimpleAudioEngine sharedEngine] playBackgroundMusic:"sound.aifc"]; [[SimpleAudioE

我是Cocos2d框架的新手,我需要在主菜单场景中帮助了解如何在循环中播放.wav文件。另外,我想得到一些关于如何在两个精灵碰撞时播放声音的帮助


谢谢

在使用v3之前,您可以在使用音频文件之前的某个时间点预加载音频文件。例如,要预加载背景音乐,您可以(这会为播放做好准备,但不会加载整个内容,而是流式播放):

要玩它,你可以称之为:

[[SimpleAudioEngine sharedEngine] playBackgroundMusic:"sound.aifc"];
[[SimpleAudioEngine sharedEngine] stopBackgroundMusic];
[[SimpleAudioEngine sharedEngine] stopEffect:audioId];
要阻止它,你可以打电话:

[[SimpleAudioEngine sharedEngine] playBackgroundMusic:"sound.aifc"];
[[SimpleAudioEngine sharedEngine] stopBackgroundMusic];
[[SimpleAudioEngine sharedEngine] stopEffect:audioId];
对于声音效果(如在两个对象碰撞时播放声音),您可以通过先预加载(加载并缓存整个对象)来执行相同的操作:

然后在需要时播放特定实例:

unsigned int audioId = [[SimpleAudioEngine sharedEngine] playEffect:@"sound.caf"
                                                              pitch:1.0f
                                                                pan:0.0f
                                                               gain:1.0f];
要停止该特定实例,请调用:

[[SimpleAudioEngine sharedEngine] playBackgroundMusic:"sound.aifc"];
[[SimpleAudioEngine sharedEngine] stopBackgroundMusic];
[[SimpleAudioEngine sharedEngine] stopEffect:audioId];
对于效果,您必须在完成音频后卸载音频(不必卸载背景音乐):

如果您使用的是v3,您可以使用以下方式预加载、播放和停止背景音乐:

// Preload...
[[OALSimpleAudio sharedInstance] preloadBg:@"sound.aifc"];

// Play (and loop the music)...
[[OALSimpleAudio sharedInstance] playBgWithLoop:YES];

// To stop the music...
[[OALSimpleAudio sharedInstance] stopBg];
对于v3中的音频效果,您可以使用以下方法预加载声音效果:

ALBuffer* soundBuffer = [[OALSimpleAudio sharedInstance] preloadEffect:@"sound.caf"];
或者,您可以异步执行此操作:

__block ALBuffer* soundBuffer;

[[OALSimpleAudio sharedInstance] preloadEffect:@"sound.caf"
                                  reduceToMono:NO
                               completionBlock:^(ALBuffer* buffer)
{
    soundBuffer = buffer;
}];
或者,您可以通过以下方式加载音频文件阵列:

NSArray* soundFiles = @[@"sound1.caf", @"sound2.caf", @"sound3.caf"];

[[OALSimpleAudio sharedInstance] preloadEffects:soundFiles
                                   reduceToMono:NO
                                  progressBlock:^(NSUInteger progress,
                                                  NSUInteger successCount,
                                                  NSUInteger total)
{
    if (successCount == total)
    {
        CCLOG(@"Sound files loaded!");
    }
}];
要播放声音效果,请执行以下操作:

[[OALSimpleAudio sharedInstance] playEffect:@"sound.caf" loop:NO];
或者,如果您有音频缓冲区,可以使用其他方式播放声音效果:

[[OALSimpleAudio sharedInstance] playBuffer:soundBuffer
                                     volume:1.0f
                                      pitch:1.0f
                                        pan:0.0f
                                       loop:NO];
要卸载所有加载和缓存的效果,请执行以下操作:

[[OALSimpleAudio sharedInstance] unloadAllEffects];

希望这能有所帮助。

可能与@MaxMacLeod:重复,或者不重复,OP没有提到哪个版本。@YvesLeBorg版本3没有与音频相关的更改@MaxMacLeod我还没有编译这些发行说明,但Denshion和SimpleAudioEngine似乎已经被OAL引擎取代(在v3中)。见下面的答案。