Skip to content

Commit a8ae923

Browse files
committed
Initial commit of Cocos2D 2.1
0 parents  commit a8ae923

File tree

2,840 files changed

+642567
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,840 files changed

+642567
-0
lines changed

AUTHORS

Lines changed: 969 additions & 0 deletions
Large diffs are not rendered by default.

CHANGELOG

Lines changed: 1815 additions & 0 deletions
Large diffs are not rendered by default.

CocosDenshion/CDAudioManager.h

Lines changed: 243 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,243 @@
1+
/*
2+
Copyright (c) 2010 Steve Oldmeadow
3+
4+
Permission is hereby granted, free of charge, to any person obtaining a copy
5+
of this software and associated documentation files (the "Software"), to deal
6+
in the Software without restriction, including without limitation the rights
7+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8+
copies of the Software, and to permit persons to whom the Software is
9+
furnished to do so, subject to the following conditions:
10+
11+
The above copyright notice and this permission notice shall be included in
12+
all copies or substantial portions of the Software.
13+
14+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20+
THE SOFTWARE.
21+
22+
$Id$
23+
*/
24+
25+
#import "CocosDenshion.h"
26+
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30000
27+
#import <AVFoundation/AVFoundation.h>
28+
#else
29+
#import "CDXMacOSXSupport.h"
30+
#endif
31+
32+
/** Different modes of the engine */
33+
typedef enum {
34+
kAMM_FxOnly, //!Other apps will be able to play audio
35+
kAMM_FxPlusMusic, //!Only this app will play audio
36+
kAMM_FxPlusMusicIfNoOtherAudio, //!If another app is playing audio at start up then allow it to continue and don't play music
37+
kAMM_MediaPlayback, //!This app takes over audio e.g music player app
38+
kAMM_PlayAndRecord //!App takes over audio and has input and output
39+
} tAudioManagerMode;
40+
41+
/** Possible states of the engine */
42+
typedef enum {
43+
kAMStateUninitialised, //!Audio manager has not been initialised - do not use
44+
kAMStateInitialising, //!Audio manager is in the process of initialising - do not use
45+
kAMStateInitialised //!Audio manager is initialised - safe to use
46+
} tAudioManagerState;
47+
48+
typedef enum {
49+
kAMRBDoNothing, //Audio manager will not do anything on resign or becoming active
50+
kAMRBStopPlay, //Background music is stopped on resign and resumed on become active
51+
kAMRBStop //Background music is stopped on resign but not resumed - maybe because you want to do this from within your game
52+
} tAudioManagerResignBehavior;
53+
54+
/** Notifications */
55+
extern NSString * const kCDN_AudioManagerInitialised;
56+
57+
@interface CDAsynchInitialiser : NSOperation {}
58+
@end
59+
60+
/** CDAudioManager supports two long audio source channels called left and right*/
61+
typedef enum {
62+
kASC_Left = 0,
63+
kASC_Right = 1
64+
} tAudioSourceChannel;
65+
66+
typedef enum {
67+
kLAS_Init,
68+
kLAS_Loaded,
69+
kLAS_Playing,
70+
kLAS_Paused,
71+
kLAS_Stopped,
72+
} tLongAudioSourceState;
73+
74+
@class CDLongAudioSource;
75+
@protocol CDLongAudioSourceDelegate <NSObject>
76+
@optional
77+
/** The audio source completed playing */
78+
- (void) cdAudioSourceDidFinishPlaying:(CDLongAudioSource *) audioSource;
79+
/** The file used to load the audio source has changed */
80+
- (void) cdAudioSourceFileDidChange:(CDLongAudioSource *) audioSource;
81+
@end
82+
83+
/**
84+
CDLongAudioSource represents an audio source that has a long duration which makes
85+
it costly to load into memory for playback as an effect using CDSoundEngine. Examples
86+
include background music and narration tracks. The audio file may or may not be compressed.
87+
Bear in mind that current iDevices can only use hardware to decode a single compressed
88+
audio file at a time and playing multiple compressed files will result in a performance drop
89+
as software decompression will take place.
90+
@since v0.99
91+
*/
92+
@interface CDLongAudioSource : NSObject <AVAudioPlayerDelegate, CDAudioInterruptProtocol>{
93+
AVAudioPlayer *audioSourcePlayer;
94+
NSString *audioSourceFilePath;
95+
NSInteger numberOfLoops;
96+
float volume;
97+
id<CDLongAudioSourceDelegate> delegate;
98+
BOOL mute;
99+
BOOL enabled_;
100+
BOOL backgroundMusic;
101+
@public
102+
BOOL systemPaused;//Used for auto resign handling
103+
NSTimeInterval systemPauseLocation;//Used for auto resign handling
104+
@protected
105+
tLongAudioSourceState state;
106+
}
107+
@property (readonly) AVAudioPlayer *audioSourcePlayer;
108+
@property (readonly) NSString *audioSourceFilePath;
109+
@property (readwrite, nonatomic) NSInteger numberOfLoops;
110+
@property (readwrite, nonatomic) float volume;
111+
@property (assign) id<CDLongAudioSourceDelegate> delegate;
112+
/* This long audio source functions as background music */
113+
@property (readwrite, nonatomic) BOOL backgroundMusic;
114+
115+
/** Loads the file into the audio source */
116+
-(void) load:(NSString*) filePath;
117+
/** Plays the audio source */
118+
-(void) play;
119+
/** Stops playing the audio soruce */
120+
-(void) stop;
121+
/** Pauses the audio source */
122+
-(void) pause;
123+
/** Rewinds the audio source */
124+
-(void) rewind;
125+
/** Resumes playing the audio source if it was paused */
126+
-(void) resume;
127+
/** Returns whether or not the audio source is playing */
128+
-(BOOL) isPlaying;
129+
130+
@end
131+
132+
/**
133+
CDAudioManager manages audio requirements for a game. It provides access to a CDSoundEngine object
134+
for playing sound effects. It provides access to two CDLongAudioSource object (left and right channel)
135+
for playing long duration audio such as background music and narration tracks. Additionally it manages
136+
the audio session to take care of things like audio session interruption and interacting with the audio
137+
of other apps that are running on the device.
138+
139+
Requirements:
140+
- Firmware: OS 2.2 or greater
141+
- Files: CDAudioManager.*, CocosDenshion.*
142+
- Frameworks: OpenAL, AudioToolbox, AVFoundation
143+
@since v0.8
144+
*/
145+
@interface CDAudioManager : NSObject <CDLongAudioSourceDelegate, CDAudioInterruptProtocol, AVAudioSessionDelegate> {
146+
CDSoundEngine *soundEngine;
147+
CDLongAudioSource *backgroundMusic;
148+
NSMutableArray *audioSourceChannels;
149+
NSString* _audioSessionCategory;
150+
BOOL _audioWasPlayingAtStartup;
151+
tAudioManagerMode _mode;
152+
SEL backgroundMusicCompletionSelector;
153+
id backgroundMusicCompletionListener;
154+
BOOL willPlayBackgroundMusic;
155+
BOOL _mute;
156+
BOOL _resigned;
157+
BOOL _interrupted;
158+
BOOL _audioSessionActive;
159+
BOOL enabled_;
160+
161+
//For handling resign/become active
162+
BOOL _isObservingAppEvents;
163+
tAudioManagerResignBehavior _resignBehavior;
164+
}
165+
166+
@property (readonly) CDSoundEngine *soundEngine;
167+
@property (readonly) CDLongAudioSource *backgroundMusic;
168+
@property (readonly) BOOL willPlayBackgroundMusic;
169+
170+
/** Returns the shared singleton */
171+
+ (CDAudioManager *) sharedManager;
172+
+ (tAudioManagerState) sharedManagerState;
173+
/** Configures the shared singleton with a mode*/
174+
+ (void) configure: (tAudioManagerMode) mode;
175+
/** Initializes the engine asynchronously with a mode */
176+
+ (void) initAsynchronously: (tAudioManagerMode) mode;
177+
/** Initializes the engine synchronously with a mode, channel definition and a total number of channels */
178+
- (id) init: (tAudioManagerMode) mode;
179+
-(void) audioSessionInterrupted;
180+
-(void) audioSessionResumed;
181+
-(void) setResignBehavior:(tAudioManagerResignBehavior) resignBehavior autoHandle:(BOOL) autoHandle;
182+
/** Returns true is audio is muted at a hardware level e.g user has ringer switch set to off */
183+
-(BOOL) isDeviceMuted;
184+
/** Returns true if another app is playing audio such as the iPod music player */
185+
-(BOOL) isOtherAudioPlaying;
186+
/** Sets the way the audio manager interacts with the operating system such as whether it shares output with other apps or obeys the mute switch */
187+
-(void) setMode:(tAudioManagerMode) mode;
188+
/** Shuts down the shared audio manager instance so that it can be reinitialised */
189+
+(void) end;
190+
191+
/** Call if you want to use built in resign behavior but need to do some additional audio processing on resign active. */
192+
- (void) applicationWillResignActive;
193+
/** Call if you want to use built in resign behavior but need to do some additional audio processing on become active. */
194+
- (void) applicationDidBecomeActive;
195+
196+
//New AVAudioPlayer API
197+
/** Loads the data from the specified file path to the channel's audio source */
198+
-(CDLongAudioSource*) audioSourceLoad:(NSString*) filePath channel:(tAudioSourceChannel) channel;
199+
/** Retrieves the audio source for the specified channel */
200+
-(CDLongAudioSource*) audioSourceForChannel:(tAudioSourceChannel) channel;
201+
202+
//Legacy AVAudioPlayer API
203+
/** Plays music in background. The music can be looped or not
204+
It is recommended to use .aac files as background music since they are decoded by the device (hardware).
205+
*/
206+
-(void) playBackgroundMusic:(NSString*) filePath loop:(BOOL) loop;
207+
/** Preloads a background music */
208+
-(void) preloadBackgroundMusic:(NSString*) filePath;
209+
/** Stops playing the background music */
210+
-(void) stopBackgroundMusic;
211+
/** Pauses the background music */
212+
-(void) pauseBackgroundMusic;
213+
/** Rewinds the background music */
214+
-(void) rewindBackgroundMusic;
215+
/** Resumes playing the background music */
216+
-(void) resumeBackgroundMusic;
217+
/** Returns whether or not the background music is playing */
218+
-(BOOL) isBackgroundMusicPlaying;
219+
220+
-(void) setBackgroundMusicCompletionListener:(id) listener selector:(SEL) selector;
221+
222+
@end
223+
224+
/** Fader for long audio source objects */
225+
@interface CDLongAudioSourceFader : CDPropertyModifier{}
226+
@end
227+
228+
static const int kCDNoBuffer = -1;
229+
230+
/** Allows buffers to be associated with file names */
231+
@interface CDBufferManager:NSObject{
232+
NSMutableDictionary* loadedBuffers;
233+
NSMutableArray *freedBuffers;
234+
CDSoundEngine *soundEngine;
235+
int nextBufferId;
236+
}
237+
238+
-(id) initWithEngine:(CDSoundEngine *) theSoundEngine;
239+
-(int) bufferForFile:(NSString*) filePath create:(BOOL) create;
240+
-(void) releaseBufferForFile:(NSString *) filePath;
241+
242+
@end
243+

0 commit comments

Comments
 (0)