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  }