Updated everything for dependencies. All sub packages are now part of the project. This was a massive update, hopefully won't have to be reverted.
This commit is contained in:
452
gumble/go-openal/openal/source.go
Normal file
452
gumble/go-openal/openal/source.go
Normal file
@ -0,0 +1,452 @@
|
||||
// Copyright 2009 Peter H. Froehlich. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package openal
|
||||
|
||||
/*
|
||||
#include <stdlib.h>
|
||||
#cgo darwin LDFLAGS: -framework OpenAL
|
||||
#include "local.h"
|
||||
#include "wrapper.h"
|
||||
*/
|
||||
import "C"
|
||||
import (
|
||||
"fmt"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
type State int32
|
||||
|
||||
func (s State) String() string {
|
||||
switch s {
|
||||
case Initial:
|
||||
return "Initial"
|
||||
case Playing:
|
||||
return "Playing"
|
||||
case Paused:
|
||||
return "Paused"
|
||||
case Stopped:
|
||||
return "Stopped"
|
||||
default:
|
||||
return fmt.Sprintf("%x", int32(s))
|
||||
}
|
||||
}
|
||||
|
||||
// Results from Source.State() query.
|
||||
const (
|
||||
Initial State = 0x1011
|
||||
Playing State = 0x1012
|
||||
Paused State = 0x1013
|
||||
Stopped State = 0x1014
|
||||
)
|
||||
|
||||
// Results from Source.Type() query.
|
||||
const (
|
||||
Static = 0x1028
|
||||
Streaming = 0x1029
|
||||
Undetermined = 0x1030
|
||||
)
|
||||
|
||||
// TODO: Source properties.
|
||||
// Regardless of what your al.h header may claim, Pitch
|
||||
// only applies to Sources, not to Listeners. And I got
|
||||
// that from Chris Robinson himself.
|
||||
const (
|
||||
AlSourceRelative = 0x202
|
||||
AlConeInnerAngle = 0x1001
|
||||
AlConeOuterAngle = 0x1002
|
||||
AlPitch = 0x1003
|
||||
AlDirection = 0x1005
|
||||
AlLooping = 0x1007
|
||||
AlBuffer = 0x1009
|
||||
AlMinGain = 0x100D
|
||||
AlMaxGain = 0x100E
|
||||
AlReferenceDistance = 0x1020
|
||||
AlRolloffFactor = 0x1021
|
||||
AlConeOuterGain = 0x1022
|
||||
AlMaxDistance = 0x1023
|
||||
AlSecOffset = 0x1024
|
||||
AlSampleOffset = 0x1025
|
||||
AlByteOffset = 0x1026
|
||||
)
|
||||
|
||||
// Sources represent sound emitters in 3d space.
|
||||
type Source uint32
|
||||
|
||||
type Sources []Source
|
||||
|
||||
// NewSources() creates n sources.
|
||||
// Renamed, was GenSources.
|
||||
func NewSources(n int) (sources Sources) {
|
||||
sources = make(Sources, n)
|
||||
C.walGenSources(C.ALsizei(n), unsafe.Pointer(&sources[0]))
|
||||
return
|
||||
}
|
||||
|
||||
// Delete deletes the sources.
|
||||
func (self Sources) Delete() {
|
||||
n := len(self)
|
||||
C.walDeleteSources(C.ALsizei(n), unsafe.Pointer(&self[0]))
|
||||
}
|
||||
|
||||
// Renamed, was SourcePlayv.
|
||||
func (self Sources) Play() {
|
||||
C.walSourcePlayv(C.ALsizei(len(self)), unsafe.Pointer(&self[0]))
|
||||
}
|
||||
|
||||
// Renamed, was SourceStopv.
|
||||
func (self Sources) Stop() {
|
||||
C.walSourceStopv(C.ALsizei(len(self)), unsafe.Pointer(&self[0]))
|
||||
}
|
||||
|
||||
// Renamed, was SourceRewindv.
|
||||
func (self Sources) Rewind() {
|
||||
C.walSourceRewindv(C.ALsizei(len(self)), unsafe.Pointer(&self[0]))
|
||||
}
|
||||
|
||||
// Renamed, was SourcePausev.
|
||||
func (self Sources) Pause() {
|
||||
C.walSourcePausev(C.ALsizei(len(self)), unsafe.Pointer(&self[0]))
|
||||
}
|
||||
|
||||
// Renamed, was Sourcef.
|
||||
func (self Source) Setf(param int32, value float32) {
|
||||
C.alSourcef(C.ALuint(self), C.ALenum(param), C.ALfloat(value))
|
||||
}
|
||||
|
||||
// Renamed, was Source3f.
|
||||
func (self Source) Set3f(param int32, value1, value2, value3 float32) {
|
||||
C.alSource3f(C.ALuint(self), C.ALenum(param), C.ALfloat(value1), C.ALfloat(value2), C.ALfloat(value3))
|
||||
}
|
||||
|
||||
// Renamed, was Sourcefv.
|
||||
func (self Source) Setfv(param int32, values []float32) {
|
||||
C.walSourcefv(C.ALuint(self), C.ALenum(param), unsafe.Pointer(&values[0]))
|
||||
}
|
||||
|
||||
// Renamed, was Sourcei.
|
||||
func (self Source) Seti(param int32, value int32) {
|
||||
C.alSourcei(C.ALuint(self), C.ALenum(param), C.ALint(value))
|
||||
}
|
||||
|
||||
// Renamed, was Source3i.
|
||||
func (self Source) Set3i(param int32, value1, value2, value3 int32) {
|
||||
C.alSource3i(C.ALuint(self), C.ALenum(param), C.ALint(value1), C.ALint(value2), C.ALint(value3))
|
||||
}
|
||||
|
||||
// Renamed, was Sourceiv.
|
||||
func (self Source) Setiv(param int32, values []int32) {
|
||||
C.walSourceiv(C.ALuint(self), C.ALenum(param), unsafe.Pointer(&values[0]))
|
||||
}
|
||||
|
||||
// Renamed, was GetSourcef.
|
||||
func (self Source) Getf(param int32) float32 {
|
||||
return float32(C.walGetSourcef(C.ALuint(self), C.ALenum(param)))
|
||||
}
|
||||
|
||||
// Renamed, was GetSource3f.
|
||||
func (self Source) Get3f(param int32) (v1, v2, v3 float32) {
|
||||
C.walGetSource3f(C.ALuint(self), C.ALenum(param), unsafe.Pointer(&v1),
|
||||
unsafe.Pointer(&v2), unsafe.Pointer(&v3))
|
||||
return
|
||||
}
|
||||
|
||||
// Renamed, was GetSourcefv.
|
||||
func (self Source) Getfv(param int32, values []float32) {
|
||||
C.walGetSourcefv(C.ALuint(self), C.ALenum(param), unsafe.Pointer(&values[0]))
|
||||
}
|
||||
|
||||
// Renamed, was GetSourcei.
|
||||
func (self Source) Geti(param int32) int32 {
|
||||
return int32(C.walGetSourcei(C.ALuint(self), C.ALenum(param)))
|
||||
}
|
||||
|
||||
// Renamed, was GetSource3i.
|
||||
func (self Source) Get3i(param int32) (v1, v2, v3 int32) {
|
||||
C.walGetSource3i(C.ALuint(self), C.ALenum(param), unsafe.Pointer(&v1),
|
||||
unsafe.Pointer(&v2), unsafe.Pointer(&v3))
|
||||
return
|
||||
}
|
||||
|
||||
// Renamed, was GetSourceiv.
|
||||
func (self Source) Getiv(param int32, values []int32) {
|
||||
C.walGetSourceiv(C.ALuint(self), C.ALenum(param), unsafe.Pointer(&values[0]))
|
||||
}
|
||||
|
||||
// Delete deletes the source.
|
||||
// Convenience function, see DeleteSources().
|
||||
func (self Source) Delete() {
|
||||
C.walDeleteSource(C.ALuint(self))
|
||||
}
|
||||
|
||||
// Renamed, was SourcePlay.
|
||||
func (self Source) Play() {
|
||||
C.alSourcePlay(C.ALuint(self))
|
||||
}
|
||||
|
||||
// Renamed, was SourceStop.
|
||||
func (self Source) Stop() {
|
||||
C.alSourceStop(C.ALuint(self))
|
||||
}
|
||||
|
||||
// Renamed, was SourceRewind.
|
||||
func (self Source) Rewind() {
|
||||
C.alSourceRewind(C.ALuint(self))
|
||||
}
|
||||
|
||||
// Renamed, was SourcePause.
|
||||
func (self Source) Pause() {
|
||||
C.alSourcePause(C.ALuint(self))
|
||||
}
|
||||
|
||||
// Renamed, was SourceQueueBuffers.
|
||||
func (self Source) QueueBuffers(buffers Buffers) {
|
||||
C.walSourceQueueBuffers(C.ALuint(self), C.ALsizei(len(buffers)), unsafe.Pointer(&buffers[0]))
|
||||
}
|
||||
|
||||
// Renamed, was SourceUnqueueBuffers.
|
||||
func (self Source) UnqueueBuffers(buffers Buffers) {
|
||||
C.walSourceUnqueueBuffers(C.ALuint(self), C.ALsizei(len(buffers)), unsafe.Pointer(&buffers[0]))
|
||||
}
|
||||
|
||||
///// Convenience ////////////////////////////////////////////////////
|
||||
|
||||
// NewSource() creates a single source.
|
||||
// Convenience function, see NewSources().
|
||||
func NewSource() Source {
|
||||
return Source(C.walGenSource())
|
||||
}
|
||||
|
||||
// Convenience method, see Source.QueueBuffers().
|
||||
func (self Source) QueueBuffer(buffer Buffer) {
|
||||
C.walSourceQueueBuffer(C.ALuint(self), C.ALuint(buffer))
|
||||
}
|
||||
|
||||
// Convenience method, see Source.QueueBuffers().
|
||||
func (self Source) UnqueueBuffer() Buffer {
|
||||
return Buffer(C.walSourceUnqueueBuffer(C.ALuint(self)))
|
||||
}
|
||||
|
||||
// Source queries.
|
||||
// TODO: SourceType isn't documented as a query in the
|
||||
// al.h header, but it is documented that way in
|
||||
// the OpenAL 1.1 specification.
|
||||
const (
|
||||
AlSourceState = 0x1010
|
||||
AlBuffersQueued = 0x1015
|
||||
AlBuffersProcessed = 0x1016
|
||||
AlSourceType = 0x1027
|
||||
)
|
||||
|
||||
// Convenience method, see Source.Geti().
|
||||
func (self Source) BuffersQueued() int32 {
|
||||
return self.Geti(AlBuffersQueued)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Geti().
|
||||
func (self Source) BuffersProcessed() int32 {
|
||||
return self.Geti(AlBuffersProcessed)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Geti().
|
||||
func (self Source) State() State {
|
||||
return State(self.Geti(AlSourceState))
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Geti().
|
||||
func (self Source) Type() int32 {
|
||||
return self.Geti(AlSourceType)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getf().
|
||||
func (self Source) GetGain() (gain float32) {
|
||||
return self.Getf(AlGain)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setf().
|
||||
func (self Source) SetGain(gain float32) {
|
||||
self.Setf(AlGain, gain)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getf().
|
||||
func (self Source) GetMinGain() (gain float32) {
|
||||
return self.Getf(AlMinGain)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setf().
|
||||
func (self Source) SetMinGain(gain float32) {
|
||||
self.Setf(AlMinGain, gain)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getf().
|
||||
func (self Source) GetMaxGain() (gain float32) {
|
||||
return self.Getf(AlMaxGain)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setf().
|
||||
func (self Source) SetMaxGain(gain float32) {
|
||||
self.Setf(AlMaxGain, gain)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getf().
|
||||
func (self Source) GetReferenceDistance() (distance float32) {
|
||||
return self.Getf(AlReferenceDistance)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setf().
|
||||
func (self Source) SetReferenceDistance(distance float32) {
|
||||
self.Setf(AlReferenceDistance, distance)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getf().
|
||||
func (self Source) GetMaxDistance() (distance float32) {
|
||||
return self.Getf(AlMaxDistance)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setf().
|
||||
func (self Source) SetMaxDistance(distance float32) {
|
||||
self.Setf(AlMaxDistance, distance)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getf().
|
||||
func (self Source) GetPitch() float32 {
|
||||
return self.Getf(AlPitch)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setf().
|
||||
func (self Source) SetPitch(pitch float32) {
|
||||
self.Setf(AlPitch, pitch)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getf().
|
||||
func (self Source) GetRolloffFactor() (gain float32) {
|
||||
return self.Getf(AlRolloffFactor)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setf().
|
||||
func (self Source) SetRolloffFactor(gain float32) {
|
||||
self.Setf(AlRolloffFactor, gain)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Geti().
|
||||
func (self Source) GetLooping() bool {
|
||||
return self.Geti(AlLooping) != alFalse
|
||||
}
|
||||
|
||||
var bool2al map[bool]int32 = map[bool]int32{true: alTrue, false: alFalse}
|
||||
|
||||
// Convenience method, see Source.Seti().
|
||||
func (self Source) SetLooping(yes bool) {
|
||||
self.Seti(AlLooping, bool2al[yes])
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Geti().
|
||||
func (self Source) GetSourceRelative() bool {
|
||||
return self.Geti(AlSourceRelative) != alFalse
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Seti().
|
||||
func (self Source) SetSourceRelative(yes bool) {
|
||||
self.Seti(AlSourceRelative, bool2al[yes])
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setfv().
|
||||
func (self Source) SetPosition(vector *Vector) {
|
||||
self.Set3f(AlPosition, vector[x], vector[y], vector[z])
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getfv().
|
||||
func (self Source) GetPosition(result *Vector) {
|
||||
result[x], result[y], result[z] = self.Get3f(AlPosition)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setfv().
|
||||
func (self Source) SetDirection(vector *Vector) {
|
||||
self.Set3f(AlDirection, vector[x], vector[y], vector[z])
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getfv().
|
||||
func (self Source) GetDirection(result *Vector) {
|
||||
result[x], result[y], result[z] = self.Get3f(AlDirection)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setfv().
|
||||
func (self Source) SetVelocity(vector *Vector) {
|
||||
self.Set3f(AlVelocity, vector[x], vector[y], vector[z])
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getfv().
|
||||
func (self Source) GetVelocity(result *Vector) {
|
||||
result[x], result[y], result[z] = self.Get3f(AlVelocity)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getf().
|
||||
func (self Source) GetOffsetSeconds() float32 {
|
||||
return self.Getf(AlSecOffset)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setf().
|
||||
func (self Source) SetOffsetSeconds(offset float32) {
|
||||
self.Setf(AlSecOffset, offset)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Geti().
|
||||
func (self Source) GetOffsetSamples() int32 {
|
||||
return self.Geti(AlSampleOffset)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Seti().
|
||||
func (self Source) SetOffsetSamples(offset int32) {
|
||||
self.Seti(AlSampleOffset, offset)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Geti().
|
||||
func (self Source) GetOffsetBytes() int32 {
|
||||
return self.Geti(AlByteOffset)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Seti().
|
||||
func (self Source) SetOffsetBytes(offset int32) {
|
||||
self.Seti(AlByteOffset, offset)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getf().
|
||||
func (self Source) GetInnerAngle() float32 {
|
||||
return self.Getf(AlConeInnerAngle)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setf().
|
||||
func (self Source) SetInnerAngle(offset float32) {
|
||||
self.Setf(AlConeInnerAngle, offset)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getf().
|
||||
func (self Source) GetOuterAngle() float32 {
|
||||
return self.Getf(AlConeOuterAngle)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setf().
|
||||
func (self Source) SetOuterAngle(offset float32) {
|
||||
self.Setf(AlConeOuterAngle, offset)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Getf().
|
||||
func (self Source) GetOuterGain() float32 {
|
||||
return self.Getf(AlConeOuterGain)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Setf().
|
||||
func (self Source) SetOuterGain(offset float32) {
|
||||
self.Setf(AlConeOuterGain, offset)
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Geti().
|
||||
func (self Source) SetBuffer(buffer Buffer) {
|
||||
self.Seti(AlBuffer, int32(buffer))
|
||||
}
|
||||
|
||||
// Convenience method, see Source.Geti().
|
||||
func (self Source) GetBuffer() (buffer Buffer) {
|
||||
return Buffer(self.Geti(AlBuffer))
|
||||
}
|
Reference in New Issue
Block a user