al_notandroid.go 4.8 KB

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