// Play will play the sound. Volume ( 1.0 is normal volume, 0 is silence ) // Returns the PlayInstance that can be used to stop the source while playing func (s *Sound) Play(volume float32) (request PlayInstance) { source, err := requestSource() if err != nil { return request } C.alSourcef(source.id, C.AL_GAIN, C.ALfloat(volume)) C.alSourcei(source.id, C.AL_SOURCE_RELATIVE, C.AL_TRUE) C.alSource3f(source.id, C.AL_POSITION, 0, 0, 0) C.alSourcei(source.id, C.AL_BUFFER, C.ALint(s.buffer)) source.setToPlay() request.id = source.requestId request.src = source return request }
// Play will play the sound at a given position, the falloff distance in which the sound's volume is cut in half, // and the volume ( 1.0 is normal volume, 0 is silence ) // It will return the PlayInstance that can be used to stop the source while playing // Remember that in order for the 3D audio to work properly that the audio needs to be all in one channel, not stereo! func (s *Sound) Play3D(x, y, z, falloff, volume float32) (request PlayInstance) { source, err := requestSource() if err != nil { return request } C.alSourcef(source.id, C.AL_GAIN, C.ALfloat(volume)) C.alSourcei(source.id, C.AL_SOURCE_RELATIVE, C.AL_FALSE) C.alSourcef(source.id, C.AL_REFERENCE_DISTANCE, C.ALfloat(falloff)) C.alSource3f(source.id, C.AL_POSITION, C.ALfloat(x), C.ALfloat(y), C.ALfloat(z)) C.alSourcei(source.id, C.AL_BUFFER, C.ALint(s.buffer)) source.setToPlay() request.id = source.requestId request.src = source return request }
func (source Source) SetLooping(isLooping bool) error { var i int if isLooping { i = 1 } else { i = 0 } C.alSourcei(source.source, C.AL_LOOPING, C.ALint(C.int(i))) return GetError() }
func (source Source) SetSourceRelative(isRelative bool) error { var i int if isRelative { i = 1 } else { i = 0 } C.alSourcei(source.source, C.AL_SOURCE_RELATIVE, C.ALint(C.int(i))) return GetError() }
// TODO: can't pass buffer really... func (self *Source) SetAttr(param int, value *Buffer) { C.alSourcei(self.handle, C.ALenum(param), C.ALint(value.handle)) }
// Renamed, was Sourcei. func (self Source) Seti(param int32, value int32) { C.alSourcei(C.ALuint(self), C.ALenum(param), C.ALint(value)) }
func alSourcei(s Source, k int, v int32) { C.alSourcei(C.ALuint(s), C.ALenum(k), C.ALint(v)) }
func (source Source) Sourcei(param ALenum, value int) { C.alSourcei(C.ALuint(source), C.ALenum(param), C.ALint(value)) }
func setSourcei(s Source, param int, v int32) { C.alSourcei(C.ALuint(s), C.ALenum(param), C.ALint(v)) }
func (source Source) SetState(state SourceState) error { C.alSourcei(source.source, C.AL_SOURCE_STATE, C.ALint(state)) return GetError() }
func (source Source) ClearBuffer(buf Buffer) error { C.alSourcei(source.source, C.AL_BUFFER, C.ALint(C.int(0))) return GetError() }
func (source Source) SetBuffer(buf Buffer) error { C.alSourcei(source.source, C.AL_BUFFER, C.ALint(buf.buffer)) return GetError() }
func (source Source) SetConeOuterAngle(i int) error { C.alSourcei(source.source, C.AL_CONE_OUTER_ANGLE, C.ALint(C.int(i))) return GetError() }