http://stormyprods.com/SoundEngine/
Barebones Usage Example
#importUInt32 bangSound; ... // Setup sound engine. Run it at 44Khz to match the sound files SoundEngine_Initialize(44100); // Assume the listener is in the center. SoundEngine_SetListenerPosition(0.0, 0.0, 1.0); SoundEngine_LoadEffect([[bundle pathForResource:@"bang" ofType:@"caf"] UTF8String], &bangSound); ... ALuint sourceID1, sourceID2; SoundEngine_PrimeEffect( bangSound, &sourceID1); SoundEngine_StartEffect(sourceID1); ... // Play a second instance of the same bang sound SoundEngine_PrimeEffect( bangSound, &sourceID2); SoundEngine_StartEffect(sourceID2); ... // Call at program exit SoundEngine_Teardown();
I use it in a sound manager class.
It works. but kind of slow when the application start and loading the sounds.
I don't know why. But the AVAudioPlayer seems much faster.
Maybe it's because the application is tested on simulator, a real device might have different results.
the dictionary contains "object". we have to put integers into object eg. NSNumber
#import "SoundFacade.h"
#import "SoundEngine.h"
#define kNumberOfSounds 10
@implementation SoundFacade
static NSMutableDictionary *soundDictionary;
+(void)open{
SoundEngine_Initialize(44100);
SoundEngine_SetListenerPosition(0.0, 0.0, 1.0);
soundDictionary = [[NSMutableDictionary alloc] initWithCapacity:kNumberOfSounds];
// add and prepare to play sounds
[SoundFacade addSound:@"GameName"];
// .....
}
+(void)addSound:(NSString*)name{
UInt32 sound;
SoundEngine_LoadEffect([[[NSBundle mainBundle] pathForResource:name ofType:@"wav"] UTF8String], &sound);
NSNumber *soundnum = [NSNumber numberWithUnsignedInt:sound];
[soundDictionary setObject:soundnum forKey:name];
NSLog(@"added %@.wav",name);
}
+(void)close{
for( NSNumber *soundnum in soundDictionary){
[soundnum release];
NSLog(@"Released one sound");
}
[soundDictionary release];
NSLog(@"sound-Dictionary released");
SoundEngine_Teardown();
}
+(void)playMusic{
// use AVAudioPlayer to play background music
}
+(void)stopMusic{
// stop background music
};
+(void)playSound:(NSString*)name{
ALuint sourceID;
NSNumber *soundnum = [soundDictionary objectForKey:name];
SoundEngine_PrimeEffect( [soundnum unsignedIntValue], &sourceID);
SoundEngine_StartEffect(sourceID);
}
@end
No comments:
Post a Comment