| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456 |
- // Copyright 2015 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- //go:build darwin || linux || windows
- // Package al provides OpenAL Soft bindings for Go.
- //
- // Calls are not safe for concurrent use.
- //
- // More information about OpenAL Soft is available at
- // http://www.openal.org/documentation/openal-1.1-specification.pdf.
- //
- // In order to use this package on Linux desktop distros,
- // you will need OpenAL library as an external dependency.
- // On Ubuntu 14.04 'Trusty', you may have to install this library
- // by running the command below.
- //
- // sudo apt-get install libopenal-dev
- //
- // When compiled for Android, this package uses OpenAL Soft. Please add its
- // license file to the open source notices of your application.
- // OpenAL Soft's license file could be found at
- // http://repo.or.cz/w/openal-soft.git/blob/HEAD:/COPYING.
- package al
- // Capability represents OpenAL extension capabilities.
- type Capability int32
- // Enable enables a capability.
- func Enable(c Capability) {
- alEnable(int32(c))
- }
- // Disable disables a capability.
- func Disable(c Capability) {
- alDisable(int32(c))
- }
- // Enabled reports whether the specified capability is enabled.
- func Enabled(c Capability) bool {
- return alIsEnabled(int32(c))
- }
- // Vector represents an vector in a Cartesian coordinate system.
- type Vector [3]float32
- // Orientation represents the angular position of an object in a
- // right-handed Cartesian coordinate system.
- // A cross product between the forward and up vector returns a vector
- // that points to the right.
- type Orientation struct {
- // Forward vector is the direction that the object is looking at.
- Forward Vector
- // Up vector represents the rotation of the object.
- Up Vector
- }
- func orientationFromSlice(v []float32) Orientation {
- return Orientation{
- Forward: Vector{v[0], v[1], v[2]},
- Up: Vector{v[3], v[4], v[5]},
- }
- }
- func (v Orientation) slice() []float32 {
- return []float32{v.Forward[0], v.Forward[1], v.Forward[2], v.Up[0], v.Up[1], v.Up[2]}
- }
- // Geti returns the int32 value of the given parameter.
- func Geti(param int) int32 {
- return alGetInteger(param)
- }
- // Getiv returns the int32 vector value of the given parameter.
- func Getiv(param int, v []int32) {
- alGetIntegerv(param, v)
- }
- // Getf returns the float32 value of the given parameter.
- func Getf(param int) float32 {
- return alGetFloat(param)
- }
- // Getfv returns the float32 vector value of the given parameter.
- func Getfv(param int, v []float32) {
- alGetFloatv(param, v[:])
- }
- // Getb returns the bool value of the given parameter.
- func Getb(param int) bool {
- return alGetBoolean(param)
- }
- // Getbv returns the bool vector value of the given parameter.
- func Getbv(param int, v []bool) {
- alGetBooleanv(param, v)
- }
- // GetString returns the string value of the given parameter.
- func GetString(param int) string {
- return alGetString(param)
- }
- // DistanceModel returns the distance model.
- func DistanceModel() int32 {
- return Geti(paramDistanceModel)
- }
- // SetDistanceModel sets the distance model.
- func SetDistanceModel(v int32) {
- alDistanceModel(v)
- }
- // DopplerFactor returns the doppler factor.
- func DopplerFactor() float32 {
- return Getf(paramDopplerFactor)
- }
- // SetDopplerFactor sets the doppler factor.
- func SetDopplerFactor(v float32) {
- alDopplerFactor(v)
- }
- // DopplerVelocity returns the doppler velocity.
- func DopplerVelocity() float32 {
- return Getf(paramDopplerVelocity)
- }
- // SetDopplerVelocity sets the doppler velocity.
- func SetDopplerVelocity(v float32) {
- alDopplerVelocity(v)
- }
- // SpeedOfSound is the speed of sound in meters per second (m/s).
- func SpeedOfSound() float32 {
- return Getf(paramSpeedOfSound)
- }
- // SetSpeedOfSound sets the speed of sound, its unit should be meters per second (m/s).
- func SetSpeedOfSound(v float32) {
- alSpeedOfSound(v)
- }
- // Vendor returns the vendor.
- func Vendor() string {
- return GetString(paramVendor)
- }
- // Version returns the version string.
- func Version() string {
- return GetString(paramVersion)
- }
- // Renderer returns the renderer information.
- func Renderer() string {
- return GetString(paramRenderer)
- }
- // Extensions returns the enabled extensions.
- func Extensions() string {
- return GetString(paramExtensions)
- }
- // Error returns the most recently generated error.
- func Error() int32 {
- return alGetError()
- }
- // Source represents an individual sound source in 3D-space.
- // They take PCM data, apply modifications and then submit them to
- // be mixed according to their spatial location.
- type Source uint32
- // GenSources generates n new sources. These sources should be deleted
- // once they are not in use.
- func GenSources(n int) []Source {
- return alGenSources(n)
- }
- // PlaySources plays the sources.
- func PlaySources(source ...Source) {
- alSourcePlayv(source)
- }
- // PauseSources pauses the sources.
- func PauseSources(source ...Source) {
- alSourcePausev(source)
- }
- // StopSources stops the sources.
- func StopSources(source ...Source) {
- alSourceStopv(source)
- }
- // RewindSources rewinds the sources to their beginning positions.
- func RewindSources(source ...Source) {
- alSourceRewindv(source)
- }
- // DeleteSources deletes the sources.
- func DeleteSources(source ...Source) {
- alDeleteSources(source)
- }
- // Gain returns the source gain.
- func (s Source) Gain() float32 {
- return s.Getf(paramGain)
- }
- // SetGain sets the source gain.
- func (s Source) SetGain(v float32) {
- s.Setf(paramGain, v)
- }
- // MinGain returns the source's minimum gain setting.
- func (s Source) MinGain() float32 {
- return s.Getf(paramMinGain)
- }
- // SetMinGain sets the source's minimum gain setting.
- func (s Source) SetMinGain(v float32) {
- s.Setf(paramMinGain, v)
- }
- // MaxGain returns the source's maximum gain setting.
- func (s Source) MaxGain() float32 {
- return s.Getf(paramMaxGain)
- }
- // SetMaxGain sets the source's maximum gain setting.
- func (s Source) SetMaxGain(v float32) {
- s.Setf(paramMaxGain, v)
- }
- // Position returns the position of the source.
- func (s Source) Position() Vector {
- v := Vector{}
- s.Getfv(paramPosition, v[:])
- return v
- }
- // SetPosition sets the position of the source.
- func (s Source) SetPosition(v Vector) {
- s.Setfv(paramPosition, v[:])
- }
- // Velocity returns the source's velocity.
- func (s Source) Velocity() Vector {
- v := Vector{}
- s.Getfv(paramVelocity, v[:])
- return v
- }
- // SetVelocity sets the source's velocity.
- func (s Source) SetVelocity(v Vector) {
- s.Setfv(paramVelocity, v[:])
- }
- // Orientation returns the orientation of the source.
- func (s Source) Orientation() Orientation {
- v := make([]float32, 6)
- s.Getfv(paramOrientation, v)
- return orientationFromSlice(v)
- }
- // SetOrientation sets the orientation of the source.
- func (s Source) SetOrientation(o Orientation) {
- s.Setfv(paramOrientation, o.slice())
- }
- // State returns the playing state of the source.
- func (s Source) State() int32 {
- return s.Geti(paramSourceState)
- }
- // BuffersQueued returns the number of the queued buffers.
- func (s Source) BuffersQueued() int32 {
- return s.Geti(paramBuffersQueued)
- }
- // BuffersProcessed returns the number of the processed buffers.
- func (s Source) BuffersProcessed() int32 {
- return s.Geti(paramBuffersProcessed)
- }
- // OffsetSeconds returns the current playback position of the source in seconds.
- func (s Source) OffsetSeconds() int32 {
- return s.Geti(paramSecOffset)
- }
- // OffsetSample returns the sample offset of the current playback position.
- func (s Source) OffsetSample() int32 {
- return s.Geti(paramSampleOffset)
- }
- // OffsetByte returns the byte offset of the current playback position.
- func (s Source) OffsetByte() int32 {
- return s.Geti(paramByteOffset)
- }
- // Geti returns the int32 value of the given parameter.
- func (s Source) Geti(param int) int32 {
- return alGetSourcei(s, param)
- }
- // Getf returns the float32 value of the given parameter.
- func (s Source) Getf(param int) float32 {
- return alGetSourcef(s, param)
- }
- // Getfv returns the float32 vector value of the given parameter.
- func (s Source) Getfv(param int, v []float32) {
- alGetSourcefv(s, param, v)
- }
- // Seti sets an int32 value for the given parameter.
- func (s Source) Seti(param int, v int32) {
- alSourcei(s, param, v)
- }
- // Setf sets a float32 value for the given parameter.
- func (s Source) Setf(param int, v float32) {
- alSourcef(s, param, v)
- }
- // Setfv sets a float32 vector value for the given parameter.
- func (s Source) Setfv(param int, v []float32) {
- alSourcefv(s, param, v)
- }
- // QueueBuffers adds the buffers to the buffer queue.
- func (s Source) QueueBuffers(buffer ...Buffer) {
- alSourceQueueBuffers(s, buffer)
- }
- // UnqueueBuffers removes the specified buffers from the buffer queue.
- func (s Source) UnqueueBuffers(buffer ...Buffer) {
- alSourceUnqueueBuffers(s, buffer)
- }
- // ListenerGain returns the total gain applied to the final mix.
- func ListenerGain() float32 {
- return GetListenerf(paramGain)
- }
- // ListenerPosition returns the position of the listener.
- func ListenerPosition() Vector {
- v := Vector{}
- GetListenerfv(paramPosition, v[:])
- return v
- }
- // ListenerVelocity returns the velocity of the listener.
- func ListenerVelocity() Vector {
- v := Vector{}
- GetListenerfv(paramVelocity, v[:])
- return v
- }
- // ListenerOrientation returns the orientation of the listener.
- func ListenerOrientation() Orientation {
- v := make([]float32, 6)
- GetListenerfv(paramOrientation, v)
- return orientationFromSlice(v)
- }
- // SetListenerGain sets the total gain that will be applied to the final mix.
- func SetListenerGain(v float32) {
- SetListenerf(paramGain, v)
- }
- // SetListenerPosition sets the position of the listener.
- func SetListenerPosition(v Vector) {
- SetListenerfv(paramPosition, v[:])
- }
- // SetListenerVelocity sets the velocity of the listener.
- func SetListenerVelocity(v Vector) {
- SetListenerfv(paramVelocity, v[:])
- }
- // SetListenerOrientation sets the orientation of the listener.
- func SetListenerOrientation(v Orientation) {
- SetListenerfv(paramOrientation, v.slice())
- }
- // GetListenerf returns the float32 value of the listener parameter.
- func GetListenerf(param int) float32 {
- return alGetListenerf(param)
- }
- // GetListenerfv returns the float32 vector value of the listener parameter.
- func GetListenerfv(param int, v []float32) {
- alGetListenerfv(param, v)
- }
- // SetListenerf sets the float32 value for the listener parameter.
- func SetListenerf(param int, v float32) {
- alListenerf(param, v)
- }
- // SetListenerfv sets the float32 vector value of the listener parameter.
- func SetListenerfv(param int, v []float32) {
- alListenerfv(param, v)
- }
- // A buffer represents a chunk of PCM audio data that could be buffered to an audio
- // source. A single buffer could be shared between multiple sources.
- type Buffer uint32
- // GenBuffers generates n new buffers. The generated buffers should be deleted
- // once they are no longer in use.
- func GenBuffers(n int) []Buffer {
- return alGenBuffers(n)
- }
- // DeleteBuffers deletes the buffers.
- func DeleteBuffers(buffer ...Buffer) {
- alDeleteBuffers(buffer)
- }
- // Geti returns the int32 value of the given parameter.
- func (b Buffer) Geti(param int) int32 {
- return b.Geti(param)
- }
- // Frequency returns the frequency of the buffer data in Hertz (Hz).
- func (b Buffer) Frequency() int32 {
- return b.Geti(paramFreq)
- }
- // Bits return the number of bits used to represent a sample.
- func (b Buffer) Bits() int32 {
- return b.Geti(paramBits)
- }
- // Channels return the number of the audio channels.
- func (b Buffer) Channels() int32 {
- return b.Geti(paramChannels)
- }
- // Size returns the size of the data.
- func (b Buffer) Size() int32 {
- return b.Geti(paramSize)
- }
- // BufferData buffers PCM data to the current buffer.
- func (b Buffer) BufferData(format uint32, data []byte, freq int32) {
- alBufferData(b, format, data, freq)
- }
- // Valid reports whether the buffer exists and is valid.
- func (b Buffer) Valid() bool {
- return alIsBuffer(b)
- }
|