github.com/SahandAslani/gomobile@v0.0.0-20210909130135-2cb2d44c09b2/exp/audio/al/al_notandroid.go (about) 1 // Copyright 2015 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build darwin || (linux && !android) || windows 6 // +build darwin linux,!android windows 7 8 package al 9 10 /* 11 #cgo darwin CFLAGS: -DGOOS_darwin 12 #cgo linux CFLAGS: -DGOOS_linux 13 #cgo windows CFLAGS: -DGOOS_windows 14 #cgo darwin LDFLAGS: -framework OpenAL 15 #cgo linux LDFLAGS: -lopenal 16 #cgo windows LDFLAGS: -lOpenAL32 17 18 #ifdef GOOS_darwin 19 #include <stdlib.h> 20 #include <OpenAL/al.h> 21 #endif 22 23 #ifdef GOOS_linux 24 #include <stdlib.h> 25 #include <AL/al.h> // install on Ubuntu with: sudo apt-get install libopenal-dev 26 #endif 27 28 #ifdef GOOS_windows 29 #include <windows.h> 30 #include <stdlib.h> 31 #include <AL/al.h> 32 #endif 33 */ 34 import "C" 35 import "unsafe" 36 37 func alEnable(capability int32) { 38 C.alEnable(C.ALenum(capability)) 39 } 40 41 func alDisable(capability int32) { 42 C.alDisable(C.ALenum(capability)) 43 } 44 45 func alIsEnabled(capability int32) bool { 46 return C.alIsEnabled(C.ALenum(capability)) == C.AL_TRUE 47 } 48 49 func alGetInteger(k int) int32 { 50 return int32(C.alGetInteger(C.ALenum(k))) 51 } 52 53 func alGetIntegerv(k int, v []int32) { 54 C.alGetIntegerv(C.ALenum(k), (*C.ALint)(unsafe.Pointer(&v[0]))) 55 } 56 57 func alGetFloat(k int) float32 { 58 return float32(C.alGetFloat(C.ALenum(k))) 59 } 60 61 func alGetFloatv(k int, v []float32) { 62 C.alGetFloatv(C.ALenum(k), (*C.ALfloat)(unsafe.Pointer(&v[0]))) 63 } 64 65 func alGetBoolean(k int) bool { 66 return C.alGetBoolean(C.ALenum(k)) == C.AL_TRUE 67 } 68 69 func alGetBooleanv(k int, v []bool) { 70 val := make([]C.ALboolean, len(v)) 71 for i, bv := range v { 72 if bv { 73 val[i] = C.AL_TRUE 74 } else { 75 val[i] = C.AL_FALSE 76 } 77 } 78 C.alGetBooleanv(C.ALenum(k), &val[0]) 79 } 80 81 func alGetString(v int) string { 82 value := C.alGetString(C.ALenum(v)) 83 return C.GoString((*C.char)(value)) 84 } 85 86 func alDistanceModel(v int32) { 87 C.alDistanceModel(C.ALenum(v)) 88 } 89 90 func alDopplerFactor(v float32) { 91 C.alDopplerFactor(C.ALfloat(v)) 92 } 93 94 func alDopplerVelocity(v float32) { 95 C.alDopplerVelocity(C.ALfloat(v)) 96 } 97 98 func alSpeedOfSound(v float32) { 99 C.alSpeedOfSound(C.ALfloat(v)) 100 } 101 102 func alGetError() int32 { 103 return int32(C.alGetError()) 104 } 105 106 func alGenSources(n int) []Source { 107 s := make([]Source, n) 108 C.alGenSources(C.ALsizei(n), (*C.ALuint)(unsafe.Pointer(&s[0]))) 109 return s 110 } 111 112 func alSourcePlayv(s []Source) { 113 C.alSourcePlayv(C.ALsizei(len(s)), (*C.ALuint)(unsafe.Pointer(&s[0]))) 114 } 115 116 func alSourcePausev(s []Source) { 117 C.alSourcePausev(C.ALsizei(len(s)), (*C.ALuint)(unsafe.Pointer(&s[0]))) 118 119 } 120 121 func alSourceStopv(s []Source) { 122 C.alSourceStopv(C.ALsizei(len(s)), (*C.ALuint)(unsafe.Pointer(&s[0]))) 123 } 124 125 func alSourceRewindv(s []Source) { 126 C.alSourceRewindv(C.ALsizei(len(s)), (*C.ALuint)(unsafe.Pointer(&s[0]))) 127 } 128 129 func alDeleteSources(s []Source) { 130 C.alDeleteSources(C.ALsizei(len(s)), (*C.ALuint)(unsafe.Pointer(&s[0]))) 131 } 132 133 func alGetSourcei(s Source, k int) int32 { 134 var v C.ALint 135 C.alGetSourcei(C.ALuint(s), C.ALenum(k), &v) 136 return int32(v) 137 } 138 139 func alGetSourcef(s Source, k int) float32 { 140 var v C.ALfloat 141 C.alGetSourcef(C.ALuint(s), C.ALenum(k), &v) 142 return float32(v) 143 } 144 145 func alGetSourcefv(s Source, k int, v []float32) { 146 C.alGetSourcefv(C.ALuint(s), C.ALenum(k), (*C.ALfloat)(unsafe.Pointer(&v[0]))) 147 } 148 149 func alSourcei(s Source, k int, v int32) { 150 C.alSourcei(C.ALuint(s), C.ALenum(k), C.ALint(v)) 151 } 152 153 func alSourcef(s Source, k int, v float32) { 154 C.alSourcef(C.ALuint(s), C.ALenum(k), C.ALfloat(v)) 155 } 156 157 func alSourcefv(s Source, k int, v []float32) { 158 C.alSourcefv(C.ALuint(s), C.ALenum(k), (*C.ALfloat)(unsafe.Pointer(&v[0]))) 159 } 160 161 func alSourceQueueBuffers(s Source, b []Buffer) { 162 C.alSourceQueueBuffers(C.ALuint(s), C.ALsizei(len(b)), (*C.ALuint)(unsafe.Pointer(&b[0]))) 163 } 164 165 func alSourceUnqueueBuffers(s Source, b []Buffer) { 166 C.alSourceUnqueueBuffers(C.ALuint(s), C.ALsizei(len(b)), (*C.ALuint)(unsafe.Pointer(&b[0]))) 167 } 168 169 func alGetListenerf(k int) float32 { 170 var v C.ALfloat 171 C.alGetListenerf(C.ALenum(k), &v) 172 return float32(v) 173 } 174 175 func alGetListenerfv(k int, v []float32) { 176 C.alGetListenerfv(C.ALenum(k), (*C.ALfloat)(unsafe.Pointer(&v[0]))) 177 } 178 179 func alListenerf(k int, v float32) { 180 C.alListenerf(C.ALenum(k), C.ALfloat(v)) 181 } 182 183 func alListenerfv(k int, v []float32) { 184 C.alListenerfv(C.ALenum(k), (*C.ALfloat)(unsafe.Pointer(&v[0]))) 185 } 186 187 func alGenBuffers(n int) []Buffer { 188 s := make([]Buffer, n) 189 C.alGenBuffers(C.ALsizei(n), (*C.ALuint)(unsafe.Pointer(&s[0]))) 190 return s 191 } 192 193 func alDeleteBuffers(b []Buffer) { 194 C.alDeleteBuffers(C.ALsizei(len(b)), (*C.ALuint)(unsafe.Pointer(&b[0]))) 195 } 196 197 func alGetBufferi(b Buffer, k int) int32 { 198 var v C.ALint 199 C.alGetBufferi(C.ALuint(b), C.ALenum(k), &v) 200 return int32(v) 201 } 202 203 func alBufferData(b Buffer, format uint32, data []byte, freq int32) { 204 C.alBufferData(C.ALuint(b), C.ALenum(format), unsafe.Pointer(&data[0]), C.ALsizei(len(data)), C.ALsizei(freq)) 205 } 206 207 func alIsBuffer(b Buffer) bool { 208 return C.alIsBuffer(C.ALuint(b)) == C.AL_TRUE 209 }