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

71 lines
1.7 KiB
Objective-C

#import "SoundPlayer.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];
if (self.delegate) {
[self.delegate didCompleteSoundInstanceOfType:soundInst.instanceType];
}
}];
[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];
[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];
}
-(void) awake {
for( SoundInstance* sound in currentActiveAudioPlayers.allValues){
[sound play];
}
}
@end