// // SoundEffectInstance.m // XNI // // Created by Matej Jan on 15.12.10. // Copyright 2010 Retronator. All rights reserved. // #import "SoundEffectInstance.h" #import "SoundEffectInstance+Internal.h" #import "SoundEffect+Internal.h" @implementation SoundEffectInstance - (id) initWithSoundEffect:(SoundEffect *)soundEffect { self = [super init]; if (self != nil) { parent = [soundEffect retain]; // grab a source ID from openAL alGenSources(1, &sourceID); // attach the buffer to the source alSourcei(sourceID, AL_BUFFER, parent.bufferID); // set some basic source prefs alSourcef(sourceID, AL_PITCH, 1.0f); alSourcef(sourceID, AL_GAIN, 1.0f); } return self; } @synthesize isLooped, pan, pitch, volume; - (void) setIsLooped:(BOOL)value { isLooped = value; alSourcei(sourceID, AL_LOOPING, isLooped); } - (SoundState) state { ALenum state; alGetSourcei(sourceID, AL_SOURCE_STATE, &state); return state; } - (void) setPan:(float)value { pan = value; alSource3f(sourceID, AL_POSITION, pan, 0, 0); } - (void) setPitch:(float)value { pitch = value; float alPitch = pow(2, value); alSourcef(sourceID, AL_PITCH, alPitch); } - (void) setVolume:(float)value { volume = value; alSourcef(sourceID, AL_GAIN, volume); } - (void) play { alSourcePlay(sourceID); } - (void) pause { alSourcePause(sourceID); } - (void) resume { alSourcePlay(sourceID); } - (void) stop { [self stopImmediate:YES]; } - (void) stopImmediate:(BOOL)immediate { if (immediate) { alSourceStop(sourceID); } } - (void) dealloc { alDeleteSources(1, &sourceID); [parent release]; [super dealloc]; } @end