al_notandroid.go 4.8 KB

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