session-ios/Signal/src/audio/SoundPlayer.m

69 lines
1.6 KiB
Mathematica
Raw Normal View History

2014-05-06 19:41:08 +02:00
#import "SoundPlayer.h"
#import "SoundBoard.h"
@interface SoundInstance ()
-(void) play;
-(void) stop;
@end
@implementation SoundPlayer
NSMutableDictionary* currentActiveAudioPlayers;
-(SoundPlayer*) init{
currentActiveAudioPlayers = [NSMutableDictionary dictionary];
return self;
}
#pragma mark Delegate Implementations
-(void) addSoundToManifest:(SoundInstance*) sound {
@synchronized(currentActiveAudioPlayers){
[sound setCompeletionBlock:^(SoundInstance* soundInst) {
[self removeSoundFromManifest:soundInst];
}];
[currentActiveAudioPlayers setValue:sound forKey:[sound getId]];
}
}
-(void) removeSoundFromManifest:(SoundInstance*) sound {
[self removeSoundFromMainifestById:[sound getId]];
}
-(void) removeSoundFromMainifestById:(NSString*) soundId {
@synchronized(currentActiveAudioPlayers){
[currentActiveAudioPlayers removeObjectForKey:soundId];
}
}
-(void) playSound:(SoundInstance*) sound {
if (![self isSoundPlaying:sound]){
[self addSoundToManifest:sound];
[sound play];
}
}
-(void) stopSound:(SoundInstance*) sound {
SoundInstance* playingSoundInstance = currentActiveAudioPlayers[[sound getId]];
2014-05-06 19:41:08 +02:00
[self removeSoundFromManifest:sound];
[playingSoundInstance stop];
}
-(void) stopAllAudio{
for( SoundInstance* sound in [currentActiveAudioPlayers allValues]){
[self stopSound:sound];
}
}
-(BOOL) isSoundPlaying:(SoundInstance*) sound {
return nil != currentActiveAudioPlayers[[sound getId]];
2014-05-06 19:41:08 +02:00
}
-(void) awake {
for( SoundInstance* sound in [currentActiveAudioPlayers allValues]){
[sound play];
}
}
@end