Introduction
In this iDevBlogADay tutorial I will show you how to add music and effects to your iPhone game. You will learn how to play effects passing pan, pitch & gain parameters, preload background music & adding steps effects. We will use CocosDenshion to achieve this. This audio library is already included in Cocos2D, so you will not need to download or configure anything! For a complete overview of what CocosDenshion is please read its FAQ at http://cocos2d-iphone.org/wiki/doku.php/cocosdenshion:faq
Supported formats
CocosDenshion supports the following audio formats:
MP3 (IOS 3.0 onward)
WAV
IMA4 (1/4 the size of a WAV file)
To convert a WAV file to IMA4:
Open Terminal and type:
afconvert -f caff -d ima4 mysound.wav
The code
Add this line at the beginning of your implementation file (below #import “HelloWorldLayer.h”)
#import "SimpleAudioEngine.h"
Add these lines inside your init method
//Preloading background music
[[SimpleAudioEngine sharedEngine] preloadBackgroundMusic:@"background.mp3"];
//Preloading effects
[[SimpleAudioEngine sharedEngine] preloadEffect:@"asphalt1.mp3"];
//Play background music
[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"background.mp3"];
//Play effect
[[SimpleAudioEngine sharedEngine] playEffect:@"effect.wav"];
//Play effect advanced settings
[[SimpleAudioEngine sharedEngine] playEffect:stepEffect pitch:1.0f pan:0.0f gain:0.6f];
Values:
pitch: 0.5f (half the speed) to 2.0f (twice the speed). 1.0f to play normal speed
pan: -1.0f fully left, 1.0f fully right. 0.0f centered.
pitch: 1.0f unchanged. Each division by 2 equals a -6dB reduction
//Pause background music
[[SimpleAudioEngine sharedEngine] pauseBackgroundMusic];
// Background music volume
[CDAudioManager sharedManager].backgroundMusic.volume = 1.0f;
// Get noticed when background music stops
[[CDAudioManager sharedManager] setBackgroundMusicCompletionListener:self selector:@selector(backgroundMusicFinished)];
// Loop background music
[[CDAudioManager sharedManager] playBackgroundMusic:@"background.mp3" loop:YES];
[CDAudioManager sharedManager].backgroundMusic.numberOfLoops = 3; //To loop 3 times
Adding Steps:
Use this code to add steps sounds to your characters.
Add this line to your interface file:
CCLabelTTF *label;
BOOL bStepEffect;
Add these functions above your init method:
-(void) backgroundMusicFinished{
CCLOG(@"Background Music Completed");
[label setString:@"Music completed"];
}
-(void) playStepEffect {
[[SimpleAudioEngine sharedEngine] playEffect:@"asphalt1.mp3" pitch:1.0f pan:0.0f gain:0.6f];
}
- (void) playSteps: (ccTime) dt{
[self playStepEffect];
}
-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
CCLOG(@"Start/Stop Steps");
if(bStepEffect == FALSE){
[self playStepEffect];
[self schedule:@selector(playSteps:) interval:0.3f];
bStepEffect = TRUE;
}else{
[self unschedule:@selector(playSteps:)];
bStepEffect = FALSE;
}
return TRUE;
}
Finally, add the following lines inside your init method:
bStepEffect = FALSE;
self.isTouchEnabled = YES;
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
Positional Audio:
@Crocodella has an excellent article explaining what positional audio is and its benefits.
“The term itself is pretty self-explanatory, in that positional audio is the simulation of the ability that we humans have to judge the approximate distance and direction of a sound source, and also the physical properties of sound based on the environment.” You can find the complete tutorial here:
http://www.crocodella.com.br/2011/05/positional-audio-with-cocos2d-and-cocosdenshion/
Professional Music:
Our game music is being composed by @wblackall, he’s doing an amazing job, so I recommend him if you plan on adding background music to your game.
Sources
Click here to download the source code of this tutorial