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