summary refs log tree commit diff stats
path: root/libs/CocosDenshion/CDAudioManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/CocosDenshion/CDAudioManager.h')
-rwxr-xr-xlibs/CocosDenshion/CDAudioManager.h243
1 files changed, 243 insertions, 0 deletions
diff --git a/libs/CocosDenshion/CDAudioManager.h b/libs/CocosDenshion/CDAudioManager.h new file mode 100755 index 0000000..2475929 --- /dev/null +++ b/libs/CocosDenshion/CDAudioManager.h
@@ -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 */
33typedef 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 */
42typedef 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
48typedef 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 */
55extern NSString * const kCDN_AudioManagerInitialised;
56
57@interface CDAsynchInitialiser : NSOperation {}
58@end
59
60/** CDAudioManager supports two long audio source channels called left and right*/
61typedef enum {
62 kASC_Left = 0,
63 kASC_Right = 1
64} tAudioSourceChannel;
65
66typedef 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
228static 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